2011-11-16 226 views
0

我得到以下異常:如何使用Hibernate創建具有嵌套對象的對象?

Referential integrity constraint violation: "FK779B6FDFD4D56C1: PUBLIC.LOG_TAG FOREIGN KEY(PEOPLE_ID) REFERENCES PUBLIC.TAG(ID)"; 

這裏就是我想要做的事:

Set<String> tagList = getTags(); 
Log log = new Log(content, user); 
log.addTags(tagList); 
log.save(); 

我覺得理解錯誤(試圖保存的對象與一個對象的引用那還沒有保存),但我已經嘗試了保存每個對象的順序的每個組合,並且沒有任何東西似乎正在工作。我正在研究創建博客作爲參考的Play Framework教程。這是我的模型類:

@Entity 
public class Log extends Model { 
    @Lob 
    public String content; 

    @ManyToOne 
    public User author; 

    @ManyToMany(cascade=CascadeType.PERSIST) 
    public Set<Tag> tags; 

    public Log(String content, User author) { 
     this.author = author; 
     this.content = content; 
     this.tags = new TreeSet<Tag>(); 
    } 

    public void addTags(Set<String> tags) { 
     for (String tag : tags) { 
      Tag newTag = Tag.findOrCreateByName(tag); //since the DB is empty, this method is simply creating and .save()'ing tags 
      this.tags.add(newTag); 
     } 
    } 
} 

現在,標記類是一個簡單的實體,只有一個字段。

我在這裏做錯了什麼?我如何完成這項工作?

+0

你的數據庫有些奇怪。該異常表示LOG_TAG表具有TAG.ID的外鍵(PEOPLE_ID)。無論您需要刪除並重新創建表格,還是映射存在問題。 Model的名稱爲「PEOPLE_ID」的@Id列? – sceaj

回答

2

是否使用H2作爲數據庫日誌,使用DB = FS所以它保存到文件系統?您可以嘗試刪除您的db目錄,以便重新創建。模式看起來與模型不同步,因爲您的錯誤消息引用了PEOPLE_ID,並且您的示例中沒有「人員」字段。

+0

謝謝!我覺得有點傻,沒有意識到引用人的例外。這是深夜:) – Joel

1

看到了什麼錯誤,你可以打開休眠的SQL querys的輸出中,然後看看你是否真正保存標籤之前保存

相關問題