"映射者"在Hibernate中

时间:2016-06-12 14:50:16

标签: 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;

问题是尽管在两个表中都正确插入了值,但是外键列即 UserID 没有被更新。 任何人都可以建议上面的片段有什么问题吗?

1 个答案:

答案 0 :(得分:1)

您缺少targetEntity = Address.class注释中的@OneToMany参数。这是因为:

  

如果使用泛型定义集合来指定元素类型,则无需指定关联的目标实体类型;否则必须指定目标实体类。    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;