2017-05-16 10 views
0

エンティティに1対多の関係が必要です。エンティティAを永続させているときは、値を変更してエンティティBのエンティティを作成してAに関連付けます。Eclipselink:データベースへの再接続後、エンティティPrePersist/PreUpdateへの変更が失われる

エンティティマネージャが開いている間はすべて正常に動作します。私がそれを閉じてそれを再び開くと、エンティティAはエンティティBについて「忘れる」。エンティティBのエントリはまだ存在するが、それらの間のリンクは失われる。確認a.getBList()のサイズは、作成後の1である場合には

@PrePersist 
@PreUpdate 
void onCreate(EntityA a){ 
    EntityB b = new EntityB(); 
    persist b; 
    a.getBList().add(b); 
} 

:ここ

は擬似コードです。

エンティティマネージャを閉じてもう一度開くと、a.getBList()のサイズは0になりますが、EnitiyBはまだそこにあります。 BListのようなものは、実際のデータベースに永続化されることはありませんか?

アイデア?

注:これは非常に単純化された例です。実際のコードはhereです。

答えて

1

回答は特定の疑似コードに基づいています。

考えられる理由の1つは、実装がこのアプローチをサポートしていないことです。一般に

、のEntityManagerまたはクエリ操作を呼び出すべきではないポータブルアプリケーション のライフサイクル法、アクセス他の エンティティインスタンス:仕様は、ライフサイクル・コールバック・メソッドに関係(JPA 2仕様、3.5)を変更するためのサポートを必要としません同じ持続性内の関係を変更することも可能です。 コンテキスト。ライフサイクルコールバックメソッドは、ライフサイクルコールバックメソッドが呼び出されるエンティティの非関係状態を変更することがあります(4335)。

また、blistが双方向関係の非所有側である場合、この問題が発生する可能性があります。その場合、EntityBの所有側も設定する必要があります。

0

私の側で問題でした。 insertable = false、updatable = falseとマークされた結合列があった場合それでもコールバックメソッドは、私が望んでいた答えではありませんでした。ここでは、この質問になります誰が私がこれまで学んできたものだために

  • コールバックメソッド(など@PrePersist、@PreUpdateは、)元のオブジェクトを変更することはできません。変更を保存する前に他の手段で変更を行う必要があります。
関連する問題