10

JPA イベント (postUpdate) を実行しましたが、@ElementCollection としてマップされているものを除いて、エンティティのプロパティを更新すると正しくトリガーされます。

これは制限ですか?設定オプション?

これが私のエンティティの一部です

@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;
    ...

つまり、「タイトル」を変更すると、変更はリスナーによってキャッチされますが、「宛先」を変更しても同じことは起こりません。

春(3.1)までプロバイダーとして休止状態(4.0)でJPAを使用しています

ありがとう

4

3 に答える 3

2

最後に、オプティミスティック ロックを追加してこの解決を終了します。これ@Versionにより、休止状態がメインの親テーブルに書き込まれ、リスナーが呼び出されます。

いずれにせよ、これはまだ機能するはずの方法では機能していませんが、楽観的ロックを設定しても害はありません。

ありがとう

于 2012-12-05T04:06:19.113 に答える
1

所有者側 (Pck テーブル) での更新は行われず、更新されるのは収集データを保持するテーブル (PckDest) です。

コレクションの内容を変更することは、削除と挿入として実装される可能性があり、多くの場合、更新と見なされる可能性があることは議論の余地があると思います。

エンティティ管理ライフサイクルの外でそのような動作を処理するか、所有者エンティティ内にリストの変更時に更新されるある種のフィールド(ある種のチェックサムなど)を用意する必要があると思います。リストを変更すると親も更新する必要があります(これが良いアイデアかどうかはわかりませんが)。

于 2012-11-29T07:56:37.040 に答える
0

たぶん、このリンクが役立ちます:

spring 3.1.0.releaseでhibernate 4.0を使用するイベントリスナー?

Hibernate 4 と EntityListeners の登録に何らかの変更があるようです。

于 2012-12-05T08:15:59.530 に答える