[jpa:101] Re: HibernateのEventListenerについて

Hidenoshin Yoshida [E-MAIL ADDRESS DELETED]
2008年 5月 25日 (日) 10:37:35 JST


吉田(da-yoshi)です。

PostUpdateEvent引数内のgetPersisterメソッドを使って
EntityPersisterを取得します。
この中のgetPropertyNames()で取得出来るString配列が、
Entityのプロパティ名の一覧になっています。
event.getOldState()、event.getState()で取得出来る配列と
同じ順序になっているので、取得したいプロパティ名の
順番がわかれば、ステータスを判断することができます。

EntityPersister persister = event.getPersister();
for (int i = 0; i < persister.getPropertyNames().length; i++) {
  String name = persister.getPropertyNames()[i];
  if ("married".equals(name)) {
    Object oldObj = event.getOldState()[i];
    Object newObj = event.getState()[i];
  }
}

めんどくさいですが(^_^;)、これで取得出来るかと思います。

Yuu Nagasawa さんは書きました:
> はじめまして。
> 
> 長澤と申します。
> 現在、「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();
>         ......
> 
> この場合、どのように判断したらよいのでしょうか?
> 
> よろしくお願い致します。
> 以上です。
>  
> 
> 
> ------------------------------------------------------------------------
> 
> _______________________________________________
> jpa mailing list
> [E-MAIL ADDRESS DELETED]
> https://ml.seasar.org/mailman/listinfo/jpa


-- 
吉田秀之進
[E-MAIL ADDRESS DELETED]


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