2012-10-31 48 views
4

我有一個Question類,其中包含一個Answer對象的列表。 在我的POJO我在我的問題類表示此爲:使用OrmLite強制數據完整性

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

我當時認爲ORMlite將拋出一個異常,如果我嘗試:

@ForeignCollectionField 
private ForeignCollection<Answer> answers; 

,並在我的答案類,因爲這關係聲明要堅持引用Question尚未持久保存到數據庫的Answer。但是,這似乎並未發生。我可以堅持Answer對象,但不保存引用的Question對象。我驗證了Answer正在保存,沒有通過使用SQLliteBrowser查看我的數據庫來保存任何問題。這會打破我的數據完整性,因爲當我重新啓動我的程序時,db現在包含引用非現有問題的Answers。

有什麼辦法可以強制執行嗎?憑藉我在Hibernate方面的經驗,在不首先保存引用的「Parent」對象的情況下,它不會允許您保存Child對象。

回答

7

將下面的columnDefinition添加到您的字段中,如果它引用的外部標識不存在,它將不允許創建該對象。

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

參見其他線程:Creating foreign key constraints in ORMLite under SQLite