[英]Hibernate: Update onetomany list
我在Hibernate中有一个千丝万缕的联系:
@Entity
public class Project
@OneToMany(cascade = CascadeType.ALL)
@OrderColumn(name = "project_index")
List<Application> applications;
@Entity
public class Application
现在,我尝试直接更新应用程序:
session.merge(application);
结果是创建了一个新的应用程序,而不是更新实体。 我如何正确地联系我的实体并更新我的实体?
谢谢
@Override
public boolean equals(Object obj) {
if (!(obj instanceof Application)) {
return false;
}
Application app = (Application)obj;
return id == app.getId();
}
@Override
public int hashCode () {
return status.hashCode();
}
当您调用session.merge()
,它返回一个对象,该对象是当前会话上下文中该实体的值。 您不能简单地在新会话中重用现有对象,因为该对象已超出其会话的寿命(并且在新会话中可能已经创建了代表同一实体的新对象)。 您需要通过使用新对象代替旧对象来遵守hibernate的每个实例每个实例一个实例的语义。
如果您发现调用merge()
导致创建了新实体(在刷新时生成了一条插入语句),则可能意味着您要合并的对象的标识符不匹配,或者存在问题与您的equals()
或hashCode()
实现。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.