fc2ブログ

Home > Hibernate > HibernateProxyオブジェクトのinstanceof

HibernateProxyオブジェクトのinstanceof

mattyです。
Hibernateで遅延ロードしたプロキシオブジェクトをinstanceofするときのメモ。

マッピング時にlazy属性をtrueに指定するとプロキシオブジェクトが設定されるため 本来のクラスでinstanceofしてもfalseになってしまいます。

そのようなプロキシオブジェクトではなく本来のオブジェクトを呼び出したいときに便利なのが
org.hibernate.proxy.HibernateProxyHelpeクラスの getClassWithoutInitializingProxyメソッドです。
このメソッドでは下記のように本来のオブジェクトプロキシオブジェクトから取得。

public static Class getClassWithoutInitializingProxy(Object object) {
	if (object instanceof HibernateProxy) {
		HibernateProxy proxy = (HibernateProxy) object;
		LazyInitializer li = proxy.getHibernateLazyInitializer()
		return li.getPersistentClass();
	}
	else {
		return object.getClass();
	}
}

このメソッドにオブジェクトを渡せば本来のクラスを取得してinstanceof出来ます。

Comments:0

Comment Form

Trackback+Pingback:0

TrackBack URL for this entry
http://netforestdevnote.blog26.fc2.com/tb.php/46-5d129cb9
Listed below are links to weblogs that reference
HibernateProxyオブジェクトのinstanceof from Netforest Developer's Note

Home > Hibernate > HibernateProxyオブジェクトのinstanceof

Recent Comments
Recent Trackback
Search
Meta
Links
Feeds

Page Top