test.DBUser$$EnhancerByCGLIB$$40e99a2d
のようなクラスは、dynamic proxiesです。 「リア・クラスの背後にある」という概念は、ほとんどの場合、あまり意味をなさない。プロキシが作成されるたびに、それはHibernateがそれを定義するどんなクラスのインスタンスでもあります。
あなたが何であるか本当には、Map
の{ Class<Proxy>, Class<RealObject>}
です。私はそのようなことは信じていないし、私はこれが必要であると信じていない。ただ、Hibernate.getClass()
のソースを見てみましょう。
339 public static Class getClass(Object proxy) {
340 if (proxy instanceof HibernateProxy) {
341 return ((HibernateProxy) proxy).getHibernateLazyInitializer()
342 .getImplementation()
343 .getClass();
344 }
345 else {
346 return proxy.getClass();
347 }
348 }
をそれは実際のクラスを取得するには、静的なマップの検索を行うにははるかに安くなるだろうが、Hibernateは実装クラスを取得するためにすべての方法怠惰な初期化子に行きます。
なぜこれが最初に必要ですか?プロキシは基底クラスを拡張するので、基底クラスのインスタンスで呼び出せるメソッドはすべて、プロキシで呼び出すことができ、同じことを返します。 –
私はこれを、GSONライブラリにハイバネートプロキシオブジェクトを渡す際の別の質問として研究していました。ライブラリは、実装者にプロキシ 'Class'を渡す呼び出しをいくつか行い、後でプロキシ' Object'だけを呼び出し、 'Class'で何かをやりたいと思っていました。 – Flavio