Hibernate &引用;映射为;冬眠
我有两个实体类: User.java Address.java 一个用户可以有多个地址(一对多) 多个地址可以属于一个用户(多对一)Hibernate &引用;映射为;冬眠,hibernate,Hibernate,我有两个实体类: User.java Address.java 一个用户可以有多个地址(一对多) 多个地址可以属于一个用户(多对一) User.java @OneToMany(fetch=FetchType.LAZY,cascade=CascadeType.ALL,mappedBy=“user”) private Set userAddresses=new HashSet(); Address.java @manytone(fetch=FetchType.LAZY) @JoinColumn(na
User.java
@OneToMany(fetch=FetchType.LAZY,cascade=CascadeType.ALL,mappedBy=“user”)
private Set userAddresses=new HashSet();
Address.java
@manytone(fetch=FetchType.LAZY)
@JoinColumn(name=“UserID”)
私人用户;
问题是,尽管在这两个表中正确插入了值,但外键列(即UserID)没有被更新。
有人能告诉我上面的代码有什么问题吗?
您在@OneToMany
注释中缺少targetEntity=Address.class
参数。因为:
如果使用泛型定义集合以指定元素类型,则无需指定关联的目标实体类型;否则,必须指定目标实体类。
所以它应该是这样的:
User.java
@OneToMany(fetch=FetchType.LAZY,cascade=CascadeType.ALL,
targetEntity=Address.class,mappedBy=“user”)
private Set userAddresses=new HashSet();
Address.java
@manytone(fetch=FetchType.LAZY)
@JoinColumn(name=“UserID”)
私人用户;
显示如何设置地址的用户属性的代码。@Ken Chan嗨,我搞错了,我没有在地址中保存用户属性。在一对一关系中,多方是关系的所有人,对吗?但是通过指定mappedBy=user
,我们可以说user是拥有的实体。您能解释一下上述概念吗?此链接澄清了我的疑问:
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;