我使用JPA(特別是Hibernate)映射了兩個實體。這些實體有一個一對多的關係(我已經簡化了演示):嘗試在「one」實體上設置「many」時奇怪的JPA一對多行爲
@Entity
public class A {
@ManyToOne
public B getB() { return b; }
}
@Entity
public Class B {
@OneToMany(mappedBy="b")
public Set<A> getAs() { return as; }
}
現在,我試圖通過使用單的制定者來創建這些實體的兩個實例之間的關係側/關係的不所有者側(即,表被引用於):
em.getTransaction().begin();
A a = new A();
B b = new B();
Set<A> as = new HashSet<A>();
as.add(a);
b.setAs(as);
em.persist(a);
em.persist(b);
em.getTransaction().commit();
但隨後,關係不保持到DB(對實體A創建的行不參照該爲實體B創建的行)。爲什麼這樣?我會尊重它的工作。
此外,如果我從@OneToMany註釋中刪除「mappedBy」屬性,它將將工作。再次 - 爲什麼如此?以及刪除「mappedBy」屬性有什麼可能的影響?
感謝您的詳細解答。 沒有「mappedBy」,如果我改變了「many」方(A),他也堅持數據,所以我想它看起來都在(或者只是Hibernate?)。 毫無疑問,你應該管理你身邊的關係(在記憶中),但有時你只想保持「一邊」而不關心它的「許多」實體是否在內存中正確設置(引用他)。 – 2010-06-15 12:26:54