【发布时间】:2014-06-12 14:20:03
【问题描述】:
我正在使用 JPA 2.0 和 Hibernate 4.1.0.Final。我有这个实体(用户和地址对象之间的单向关系)......
@Entity
@Table(name = "user")
public class User implements Serializable
{
@OneToMany(fetch = FetchType.EAGER, cascade = {CascadeType.ALL}, orphanRemoval=true)
@JoinTable(name = "user_address", joinColumns = @JoinColumn(name = "user_id"), inverseJoinColumns = @JoinColumn(name = "address_id"))
private Set<Address> addresses;
在我的“updateUser”方法中,我有这段代码
user.setAddresses(addresses);
哪个调用
public void setAddresses(Set<Address> addresses)
{
if (this.addresses == null)
{
this.addresses = new HashSet<Address>();
}
this.addresses.clear();
if (addresses != null)
{
this.addresses.addAll(addresses);
} // if
}
问题是地址只有在“地址”是新对象时才保存,而不是重新保存现有的地址实体。我需要怎么做才能使用现有地址更新我的用户?
编辑:这是我保存实体的方式...
protected Object save(Object obj)
{
if (obj != null)
{
final Object id = getId(obj);
if (id == null)
{
m_entityManager.persist(obj);
}
else
{
obj = m_entityManager.merge(obj);
} // if
} // if
return obj;
} // save
【问题讨论】:
-
而不是
cascade上OneToMany尝试使用@org.hibernate.annotations.Cascade(SAVE_UPDATE)注释在归档addresses,如果你使用休眠。
标签: java hibernate jpa orm hibernate-mapping