私はこのようなオブジェクト階層を持っています (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.TransientObjectExceptioncB
実際の質問は次のとおりです。保存を手動でカスケードせずに、この問題を回避できますか? 私はB、それぞれが数十のCs を持つ数十の -type クラスについて話している - これは私のカスケードの考えに完全に反するだろう...
どんなアイデアでも大歓迎です!