私のアプリケーションは、ドメイン レベルの値オブジェクト間で多くの OneToMany および OneToOne 参照を使用します。それらのほとんどはエンティティであり、何かのスーパー クラスまたはサブクラスです。それらのインスタンスと実際のメソッド save() はそのままです
@Transactional
public void save(Post post){
try{
JPA.em().persist(post);
}catch (EntityExistsException eee){
JPA.em().merge(post);
}catch(ConstraintViolationException cve){
JPA.em().refresh(post);
}
}
現在の問題は、これらのオブジェクトを適切にインスタンス化する方法と、cascadeType でどの戦略を選択するかです。他のエンティティとの参照を含むオブジェクトを保存するときに、ネストされたオブジェクトを保存したいと考えています。Unique index or primary key violation
明らかinsert into Utente (passwd, DTYPE, username) values (?, 'Redattore', ?) [23505-168]
に、私のJPAプロバイダー(hibernate 3.6.9)は既存の行の更新に失敗し、代わりにDBに新しいエントリを挿入しようとします。私が使用しているいくつかのクラスは次のとおりです。
@Entity
@Table
public class Post extends Domanda {
@Column(nullable = false)
private String nome;
@OneToMany(cascade = CascadeType.ALL)
private List<Commento> commenti;
@OneToMany(cascade = CascadeType.ALL)
private List<Risorsa> risorse;
@OneToOne(cascade = CascadeType.ALL)
private NodoApprendimento nodo;
@Column
private int visibilità;
@Column
private boolean isDraft;
Post はいくつかのクラスによって参照されます。その中には次のようなものがあります。
@Entity
public abstract class Partecipante extends Utente{
@OneToMany(cascade = CascadeType.ALL,
fetch = FetchType.LAZY)
private Set<Post> contributi;
次に、データベース内の参照オブジェクトを初期化および永続化または更新する適切な方法を知りたいと思います。事前に感謝します。