2016-06-12 100 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;