Это объект с прокси для поддержки отложенной загрузки; в основном, как только вы ссылаетесь на дочерний или поисковый объект с помощью методов доступа / получателя, если связанный объект не находится в кэше сеанса, то прокси-код отправляется в базу данных и загружает связанный объект. Он использует javassist для эффективной динамической генерации подклассовых реализаций ваших объектов (хотя я думаю, что он также может быть настроен на использование CGLIB ).
Если бы он не был проксирован таким образом, было бы практически невозможно реализовать бесшовную ленивую загрузку.
Я не могу вспомнить с головы до головы, что если вы используете энергичную загрузку, то будет ли вместо этого возвращен естественный объект. Я бы вообще не рекомендовал использовать энергичную загрузку, особенно если у вас много связанных дочерних объектов, так как вскоре это может стать огромным узким местом производительности, так как оно впитает каждый связанный объект в память.
Кроме того, если вам нужно различать тип класса, вместо использования obj.getClass()
, используйте Hibernate.getClass(obj)
, который вернет вам класс естественного объекта независимо от того, прокси он или нет: см. Javadocs API Hibernate здесь .