私は比較的複雑なエンティティを持っています。このようなもの:
@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 には文字列 ID があり、ParameterValue には長い ID が生成され、Parameter には文字列 ID があります
私のエンティティにはパラメータ値があり、それぞれにパラメータがあり、異なるエンティティの他のパラメータ値間で共有されます
パラメータは異なる実装を持つ抽象クラスです
私の問題は、そのようなオブジェクトに対して hibernate セッション saveOrUpdate を呼び出すと、1) 非常に遅い 2) 時々 org.hibernate.NonUniqueObjectException を受け取ることです: 同じ識別子の値を持つ別のオブジェクトが既にセッションに関連付けられていました: [com.xxx. entities.content.EnumParameter#-1672482954]
そのようなエンティティを保存/更新する正しい方法は何ですか?
前の開発者からスキーマを継承したので、保存を簡素化する必要がある場合は変更できます