使用OrmLite强制执行数据完整性

时间:2012-10-31 23:42:18

标签: android ormlite

我有一个Question类,其中包含Answer个对象的列表。 在我的POJO中,我在我的问题类中表示为:

@ForeignCollectionField 
private ForeignCollection<Answer> answers;

在我的Answer类中,这种关系被声明为:

@DatabaseField(foreign = true, canBeNull=false)
private Question question;

如果我试图将Answer引用尚未持久存储到数据库的Question,我原本以为ORMlite会抛出异常。但是,这似乎不会发生。我可以在不保存引用的Answer对象的情况下随意保留Question个对象。我通过使用Answer查看我的数据库,验证了SQLliteBrowser正在保存,而不会保存任何问题。这会破坏我的数据完整性,因为当我重新启动程序时,db现在包含引用不存在的问题的答案。

有没有办法强制执行此操作?根据我在Hibernate方面的经验,如果不先保存引用的“父”对象,它将不允许您保存Child对象。

1 个答案:

答案 0 :(得分:7)

将以下columnDefinition添加到您的字段中,如果它引用的外来ID不存在,则不允许创建该对象。

@DatabaseField(foreign = true, canBeNull=false,
     columnDefinition = "integer references question(id) on delete cascade")
private Question question;

另见其他主题:Creating foreign key constraints in ORMLite under SQLite