2016-06-12 101 views
-1

我有兩個實體類:「映射到」 在Hibernate中

User.java

Address.java

一個用戶可以有多個地址(一對多) 和許多地址可以屬於一個用戶(多對一)

User.java 
@OneToMany(fetch = FetchType.LAZY, cascade = CascadeType.ALL, mappedBy="user") 
private Set<Address> userAddresses = new HashSet<Address>(); 

Address.java 
@ManyToOne(fetch = FetchType.LAZY) 
@JoinColumn(name="UserID") 
private User user; 

問題em是,儘管值被正確插入到兩個表中,但外鍵列UserID未被更新。 任何人都可以請建議上面的代碼段出了什麼問題?

+0

顯示的代碼是如何設置的'Address'的'user'財產。 –

+0

@Ken Chan 嗨,我得到了我的錯誤,我沒有保存地址中的用戶屬性。 在** OneToMany **關係中,許多方面是關係權的所有者? ,但通過指定'mappedBy = user',我們說用戶是擁有的實體。 你能解釋一下上面的概念嗎? –

+1

此鏈接澄清我的疑問: http://stackoverflow.com/questions/2584521/in-a-bidirectional-jpa-onetomany-manytoone-association-what-is-meant-by-the-in –

回答

1

您缺少@OneToMany註釋中的targetEntity = Address.class參數。因爲:

如果集合是使用泛型指定元素類型定義的,則不需要指定關聯的目標實體類型;否則必須指定目標實體類。 http://docs.oracle.com/javaee/5/api/javax/persistence/OneToMany.html

因此,它應該是這樣的:

User.java 
@OneToMany(fetch = FetchType.LAZY, cascade = CascadeType.ALL, 
targetEntity=Address.class, mappedBy="user") 
private Set<Address> userAddresses = new HashSet<Address>(); 

Address.java 
@ManyToOne(fetch = FetchType.LAZY) 
@JoinColumn(name="UserID") 
private User user;