2012-02-12 100 views
3

我目前正試圖解決一個問題,即在實體之間存在多個多對多關係的同時,我在Java Swing應用程序中使用了Hibernate 4。保存/更新具有多對多關係的Hibernate實體

例如,項目實體與有關係。 項目有一個多對多的關係。 A 項目可以在許多分類,所以也有一個多對多的關係。

Person *-----* Project *-----* Category 

當我有一個擺動的形式,我可以編輯有關,一個項目類別所有這些信息,並涉及到保存當用戶點擊「保存「按鈕,將有什麼可能的解決方案來保存/更新

void savePerson(Person p){ 
    Session sess = factory.openSession(); 
    Transaction tx = null; 
    try { 
     tx = sess.beginTransaction(); 

     // steps to be done 

     tx.commit(); 
    } 
    catch (RuntimeException e) { 
     if (tx != null) tx.rollback(); 
    } 
    finally { 
     sess.close(); 
    } 
} 

因爲還有一個收集項目收集的Categoy項目可能已經改變了,我必須做一個遞歸的保存類型(首先保存/更新集合包含的所有子實體,然後保存/更新Person實體),還是我只需要ave Person實體和Hibernate將保存/更新機制應用於以Person爲根的整個實體樹?任何最佳實踐?

回答

2

看看CascadeType。您可以直接在關係註解使用CascadeType的設置保存/更新操作的行爲:

@OneToMany(cascade = CascadeType.ALL) 
+1

感謝YOUT提示,這個註釋是去我上述的行爲的關鍵。但花了我幾周的時間才發現,另一個最愚蠢的命名可能需要的註釋才能正確地工作。屬性「inverse = false」,簡單地表示關係的責任方也是需要的。 – xSNRG 2012-02-14 10:08:41

相關問題