2012-01-18 8 views
1

私はjavaでhibernateを使用しています。 from MyObject where field='name'のようなクエリを実行してオブジェクトのリストを取得しています。これは正常に実行され、私はlist.size()を実行するときにも1を返します。しかし、私が行うときには、すべてのフィールドがnullのオブジェクトを取得します。list.get(0)デバッグでオブジェクトにカーソルを合わせると、次のように表示されます。com.xyz.data.MyObect_$$_javasassit_11これはどういう意味ですか?

答えて

0

これはHibernateによって作成されたプロキシクラスです。これにより、休止状態で(とりわけ)データと遅延ロードインスタンス変数データなどをキャッシュすることができます。

1

これは、Hibernateの実装方法の副作用であるlazy loadingです。 com.xyz.data.MyObect_$$_javasassit_11はHibernateによって作成されたサブクラスで、エンティティがロードされていることを確認してから実際のインスタンスにコールを転送するすべてのメソッドをオーバーライドしています。

通常、これは透過的ですが、場合によっては重要になることがあります。最も一般的なものの1つは恐ろしいLazyInitializationExceptionです。デバッガでウォッチ式がサポートされている場合、フィールドxを参照してmyobject.getX()の式を作成する代わりに、アクセサメソッドを使用してフィールドの実際の値を取得できます。

関連する問題