Các lớp như test.DBUser$$EnhancerByCGLIB$$40e99a2d
là dynamic proxies. Khái niệm "lớp thực sự đằng sau" không có ý nghĩa nhiều trong hầu hết các trường hợp. Mỗi lần một proxy được tạo ra, nó có thể là thể hiện của bất kỳ lớp nào như Hibernate định nghĩa nó.
Bạn là gì thực sự yêu cầu là tĩnh Map
của { Class<Proxy>, Class<RealObject>}
. Tôi không tin rằng có một điều như vậy và tôi không tin rằng có một nhu cầu cho điều này. Chỉ cần nhìn vào nguồn gốc củ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 }
Nó sẽ là rẻ hơn nhiều nhiều việc phải làm một tra cứu bản đồ tĩnh để có được những lớp học thực tế, nhưng Hibernate đi tất cả các cách để initializer lười biếng để có được những lớp thực hiện.
Tại sao bạn cần điều này ngay từ đầu? Proxy mở rộng lớp cơ sở của bạn, vì vậy mọi phương thức bạn có thể gọi trên một thể hiện của lớp cơ sở cũng có thể được gọi trên proxy, và sẽ quay trở lại làm điều tương tự. –
Tôi đã nghiên cứu vấn đề này cho một câu hỏi khác về việc truyền các đối tượng được hỗ trợ ngủ đông vào thư viện GSON. Thư viện làm cho một số cuộc gọi đi qua những người triển khai proxy 'Class', và chỉ sau đó là' Object' proxy, và tôi muốn có thể bắt đầu làm một cái gì đó với 'Class'. – Flavio