Klasy takie jak test.DBUser$$EnhancerByCGLIB$$40e99a2d
to dynamic proxies. Pojęcie "prawdziwa klasa za" w większości przypadków nie ma większego sensu. Za każdym razem, gdy tworzony jest serwer proxy, może on być instancją dowolnej klasy zdefiniowanej przez Hibernate.
Co to jest naprawdę z prośbą o statyczne Map
z { Class<Proxy>, Class<RealObject>}
. Nie wierzę, że coś takiego istnieje, i nie uważam, że jest taka potrzeba. Wystarczy spojrzeć na źródła 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 }
Byłoby o wiele tańsze zrobić mapie statycznej odnośnika, aby uzyskać rzeczywistą klasę, ale hibernacji idzie aż do leniwego inicjatora, aby uzyskać klasę wykonawczą.
Po co ci to na początku? Proxy rozszerza twoją klasę podstawową, więc każda metoda wywoływania instancji klasy bazowej może być również wywołana na serwerze proxy i spowoduje powrót do tej samej rzeczy. –
Szukałem tego w kolejnym pytaniu o przekazywaniu obiektów w trybie hibernacji do biblioteki GSON. Biblioteka sprawia, że niektóre wywołania przekazują implementorom proxy 'Class', a dopiero później proxy' Object', i chciałem móc zacząć coś robić z 'Class'. – Flavio