我有一个相对复杂的实体。像这样的东西:
@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。 entity.content.EnumParameter#-1672482954]
保存/更新此类实体的正确方法是什么?
我从以前的开发人员那里继承了架构,所以如果需要简化保存,我可以更改它