[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 メーリングリストの案内