[jpa:100] HibernateのEventListenerについて

Yuu Nagasawa [E-MAIL ADDRESS DELETED]
2008年 5月 25日 (日) 09:42:45 JST


はじめまして。
長澤と申します。
現在、「Seasar2とHibernateで学ぶデータベースアクセス JPA入門」と言う本で
JPAを学習しながら、簡単なWebアプリケーションを作成しています。
JPAの範囲ではなく、Hibernateの機能になってしまうのですが、
質問させてください。
次のPersonエンティティがあります。

@Entity
public class Person {
    @Id @GeneratedValue
    private Long id;
    private String name;
    private Boolean married;
    private Boolean hasForeignCar;
    ......
}

2つのBoolean型プロパティmarriedとhasForeignCarが変更された場合、
変更されたプロパティとその値によって
更新履歴テーブルに次のようなメッセージを登録したいと思っています。
「(married|hasForeignCar)が(true|false)に変更されました。」
同時に2つのプロパティが変更された場合は、
2件の更新履歴ログを登録します。

これを実現する方法はいくつかあると思いますが、
こちらの過去ログを拝見しまして、
HibernateのEventListenerを使ってみようかと思いました。
http://ml.seasar.org/archives/jpa/2007-April/000006.html

しかし、marriedとhasForeignCarのどちらのプロパティが変更されたのかを
判断する方法がわかりません。
public class PersonPostUpdateEventListener extends
EJB3PostUpdateEventListener {

    @Override
    public void onPostUpdate(PostUpdateEvent event) {
        super.onPostUpdate(event);

        //変更後のエンティティ
        log.debug("event.getEntity():" + event.getEntity());

        //変更前の各プロパティの値が格納されている
        //配列のどの要素がmarried, hasForeignCarに対応するのか?
        Object[] oldState = event.getOldState();

        //変更後の各プロパティの値が格納されている
        Object[] state = event.getState();
        ......

この場合、どのように判断したらよいのでしょうか?
よろしくお願い致します。
以上です。
-------------- next part --------------
HTMLの添付ファイルを保管しました...
URL: <http://ml.seasar.org/archives/jpa/attachments/20080525/370473de/attachment.html>


jpa メーリングリストの案内