我有两个实体类:
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 没有被更新。 任何人都可以建议上面的片段有什么问题吗?
答案 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;