2016-11-18 10 views
5

私は、Android上でSQLデータベースを管理するためにgreendaoを使用しています。今私は主キーとして2つの列を持つエンティティを生成するという問題に直面しています。私はcolumn1とcolumn2を持っていることを明確にするために、両方ともLong値であり、一緒に主キーを形成します。複数の列にあるGreenDaoの主キー

私は

@Index(unique = true) 
private Long column1, column2 

としてそれをモデル化しようとしたが、それは動作しません。 insertOrReplaceにしようとすると、単にcolumn1 idに基づいて置き換えようとすると、ユニークな制約が失敗してしまいます。

答えて

5

私はこのようなエンティティを定義することによってそれを解決した:

@Id(autoincrement = true) //I totally don't care about value of this field 
private Long idLocal; 

@Index //this are 2 columns that I use as primary key 
private Long column1id, column2id; 

私はこれはおそらく最良の解決策ではないことを知っているが、それは働いています。しかし、賞金はまだ開いているし、私はより良い解決策を与えることができる人にそれを与えるだろう。

3

GreenDaoは、期待通りに複合主キーをサポートしていません。

Issue 26これについてはgithubプロジェクトで公開されました。Issue 476も参照してください。

あなたは試してみて、追加のプロパティを参照する主キーのIDを持つことによってそれを回避するが、これはあなた自身を検証する必要がありますので、あなたのフィールドにユニークな制限を設定することはできませんすることができます。

も参照してくださいhttp://greenrobot.org/greendao/documentation/modelling-entities/#Primary_key_restrictions

+5

次のようにすることで、フィールドに固有の制約を追加することができました。 'customer'テーブルにfirstとlastの両方のフィールドに一意の制限があるようにしたい場合(実際には悪いですが例のみ)、次のように' @ Entity'アノテーション(GreenDao 3)に情報を入れます: '@Entity(nameInDb =" customer "、indexes = {@Index(value =" firstname、lastname "、unique = true)})' –

+0

これはこれまでのところ最良の解決策であり、完全に機能します。 Greendaoのエンティティモデリングも同じことを言っています。 http://greenrobot.org/greendao/documentation/modellingentent/#crayon-5949da361cc17011493334 – xrnd

関連する問題