我目前遇到OneToMany/ManyToOne-Mapping問題。映射是這樣的:JPA /休眠:雙向OneToMany/ManyToOne關係僅適用於單向
public class A implements Serializable {
@EmbeddedId
private AId id;
// Other stuff...
}
@Embeddable
public class AId implements Serializable {
@ManyToOne
@JoinColumn(name = "B_ID", nullable = false)
private B b;
// Other stuff...
}
public class B implements Serializable {
@OneToMany(mappedBy = "id.b")
private List<A> as;
// Other stuff...
}
如果我嘗試使用對象的一切工作就好了訪問對象B,但反方向不會在所有的工作。關係總是空的。
A objectA = findAById(id);
B objectB = objectA.getB(); // OK
// But... for example
objectB.getAs(); // returns null
我寫了一個小的查詢使用其主鍵讓所有的作爲對象B:
SELECT as FROM B b, IN(b.as) as WHERE b.id = :id
這工作完全,我得到預期的結果。 我查看了數據庫中的內容,也沒有問題。有誰知道爲什麼這種關係只能在一個方向上發揮作用?
問候,
亞歷
我懷疑,如果支持的mappedBy嵌套屬性名稱(我記得是在舊版本的Hibernate沒有) –
在這似乎是支持其間。 https://hibernate.atlassian.net/browse/ANN-381 – Alex
JPA不允許embeddedIds包含關係,因此這不符合JPA。無論如何,當你可以把關係放入實體本身時,爲什麼要把關係放在嵌入對象中呢?使用mapsid或甚至ID類允許您僅使用實體並避免在實體內維護嵌入式類。 – Chris