多列上的 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;
我知道这可能不是最佳解决方案,但它确实有效。然而赏金仍然开放,我会把它给任何能给我更好解决方案的人。
我正在使用 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;
我知道这可能不是最佳解决方案,但它确实有效。然而赏金仍然开放,我会把它给任何能给我更好解决方案的人。