多列上的 GreenDao 主键

GreenDao primary key on multiple columns

我正在使用 greendao 维护 Android 上的 SQL 数据库。现在我正面临生成具有两列作为主键的实体的问题。需要明确的是,我有 column1 和 column2,它们都是 Long 值,它们一起构成一个主键。

我尝试将其建模为

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

但它不起作用。我在尝试插入和尝试 inserOrReplace 时遇到唯一约束失败,它只是根据 column1 id 进行替换。

GreenDao 并不像您预期​​的那样支持复合主键。

Issue 26 was opened on the github project regarding this, and Issue 476 也引用了它。

您可以尝试通过为引用其他属性的主键设置一个 ID 来解决这个问题,但这不允许您对字段设置唯一限制,因此您必须自己验证。

另见 http://greenrobot.org/greendao/documentation/modelling-entities/#Primary_key_restrictions

我已经通过这样定义实体解决了这个问题:

@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;

我知道这可能不是最佳解决方案,但它确实有效。然而赏金仍然开放,我会把它给任何能给我更好解决方案的人。