【发布时间】:2013-11-12 13:13:12
【问题描述】:
我有一个相对复杂的实体。像这样的:
@Entity
public class MyEntity {
/// some fields
///...
@OneToMany(/*cascade = CascadeType.ALL, */fetch = FetchType.EAGER)
@Fetch(FetchMode.SELECT)
@Cascade({CascadeType.ALL})
protected Set<ParameterValue> parameterValues
//...
}
@Entity
public class ParameterValue {
// ...
@ManyToOne(fetch = FetchType.EAGER)
@Cascade({org.hibernate.annotations.CascadeType.MERGE, org.hibernate.annotations.CascadeType.SAVE_UPDATE, org.hibernate.annotations.CascadeType.REFRESH})
private Parameter parameter
}
MyEntity 有 String id,ParameterValue 生成了 long Id,Parameter 有 string id
我的实体有参数值,每个参数值都有参数,不同实体的其他参数值共享该参数值
参数是具有不同实现的抽象类
我的问题是,当我为此类对象调用休眠会话 saveOrUpdate 1)它很慢 2)有时我会收到 org.hibernate.NonUniqueObjectException:具有相同标识符值的不同对象已与会话关联:[com.xxx.entities.content.EnumParameter#-1672482954]
保存/更新此类实体的正确方法是什么?
我继承了以前开发者的架构,所以如果需要简化保存,我可以更改它
【问题讨论】: