2012-11-25 7 views
9

JPAイベント(postUpdate)が動作していて、@ElementCollectionとしてマップされているものを除き、エンティティのプロパティを更新すると正しくトリガされます。@ElementCollectionプロパティのEventListenersをトリガするトリックは何ですか?

これは制限ですか?設定オプション?私は、「タイトル」の変化は、私のリスナーによってcatchedされますが、私は「目的地」

を変更したときに同じことが起こらない変更した場合はここで

は、私のエンティティの一部つまり

@Entity 
@Inheritance(strategy = InheritanceType.JOINED) 
public class Pckg { 
    @Id @GeneratedValue(strategy = GenerationType.AUTO) 
    private Long id; 

    @Column(nullable = false, length = 100) 
    private String title; 

    @ElementCollection 
    @CollectionTable (
     name = "PckDest", 
     joinColumns = @JoinColumn(name = "package_id", nullable = false) 
    ) 
    @Column(name = "destination", nullable = false, length = 150) 
    private List<String> destinations; 
    ... 

です

私は

おかげ

+0

あなたは、あなたが「行き先」_と言うときに、より具体的になることができますか?あなたはリストを置き換えたり、リストを変更していますか? – pgreen2

+0

@ pgreen2 thx、私が_change_と言ったとき、私はいずれかの方法を意味しました。たとえば、リスト上の要素、例えば 'destinations.add(" LA ");や単に新しいリストを設定するなどです。 'destinations = new ArrayList()...'次に、私は 'EntityManager.save(xx)'を呼び出しました。 'Pckg.setTitle(" new title ")を実行すると、私の' onPostUpdate() 'が正しく呼び出されません。 – maverick

+0

私は、仕様(http://download.oracle.com/ otndocs/jcp/persistence-2.0-fr-oth-JSpec /)、間違っていると私は何も飛びません。イベントが発生したときに私はいくつかのメモに気づいた。変更が発生したとき、または変更がフラッシュされたときに発生する可能性があります。また、この仕様では、エンティティが変更されてから削除または追加され、変更された場合に何が起こるべきかについては記述していません。あなたの問題は、これらのエッジケースのようには聞こえません。私はテストベッドのセットアップを持っていません。リスナーコードとテストコードを投稿できますか? – pgreen2

答えて

1

はいかなる更新はどのような更新さがあり、所有者側(PCKテーブル)上で行われていない春(3.1)を介してプロバイダとしてHibernateでJPA(4.0)を使用していますコレクションデータ(PckDest)を保持するテーブル。私が思う

は、それが、多くの場合、削除として実装され、挿入される可能性があるため、コレクションの内容の変更は、更新を考慮することができるということも、議論の余地があります。

エンティティ管理のライフサイクルの外でこのような振る舞いを処理したり、リストの変更(ある種のチェックサムのような)で更新される所有者エンティティの中に何らかのフィールドを持たなければならないと思います。また、親が更新されなければならない(これは良いアイデアかどうかわからないが)。

+0

thx、実際には、私はメインテーブルに楽観的なロックを追加して終了し、それは私のリスナーが最終的にはバージョンを比較するときに呼び出されるようになります。これはなぜそれが動作するはずの方法で動作していない理由はまだありません。 – maverick

2

最後に、我々は力がメインの親テーブルへの書き込みを休止し、私たちのリスナーが呼び出されることを、@Versionをロック楽観追加し、これを解決するに終了します。

いずれにせよ、これはまだ動作するようになっています方法を作業されていませんが、一番下の行は、それが所定の位置に楽観的ロックを持っていて損はないか

おかげ

関連する問題