私はこのようなオブジェクト階層を持っています (id、セッター/ゲッターなどのすべてのフィールドを無視します):
@Entity
class A {
@OneToOne(cascade=CascadeType.ALL)
private B b;
}
@Entity
class B {
@OneToOne(cascade=CascadeType.ALL)
private A a;
@OneToOne(cascade=CascadeType.ALL)
private C c;
}
@Entity
class C {
private int x;
}
すべてのエンティティは@Id @GeneratedValue private Long id;
私は Hibernate と MySQL で JPA を使用しておりA
、単純な処理を行う DAO を持っています。entityManager.merge(a); entityManager.flush();
現在、このコンストラクトは JSF プロジェクトで使用されています。ここでは、new を使用して new を作成しますA
がB
、値C
はデータベースから取得されるため、既存のエンティティです。この新しく入力されたオブジェクトはページに表示され、保存ボタンをクリックしたときにのみ保存されるため、作成と保存は 2 つの異なるトランザクションで行われます。
を実行しようとすると、 in クラスの値がデータベースに既に存在するため、驚くことではありませんdao.save(a)
。org.hibernate.TransientObjectException
c
B
実際の質問は次のとおりです。保存を手動でカスケードせずに、この問題を回避できますか? 私はB
、それぞれが数十のC
s を持つ数十の -type クラスについて話している - これは私のカスケードの考えに完全に反するだろう...
どんなアイデアでも大歓迎です!