Проблема загрузки подклассов спящего объекта - PullRequest
1 голос
/ 14 августа 2011

У меня есть объект Entity A, который является суперклассом для объектов B и C, A помечается как @Inheritance (стратегии = InheritanceType.JOINED).

Затем другая сущность X, которая имеет отношение к А.

Я устанавливаю x.a для некоторого объекта типа B, но когда я загружаю x, и проверяю тип для x.a, это A, и я не могу привести его к B.

Я делал так много картографирования, как это раньше, и он работал правильно, не могу понять, в чем здесь проблема.

Также, когда я делаю entityManager.find (A.class, id), он также возвращает A, хотя существует объект B с тем же идентификатором, он возвращает B, когда я запускаю его из теста Junit, но не когда запускаю приложение на сервер Tomcat.

Ответы [ 2 ]

1 голос
/ 15 августа 2011

Звучит так, как будто вы получаете прокси вместо фактического экземпляра, поэтому вы не можете привести его к подклассу. Следующее может помочь вам развернуть прокси:

Преобразование прокси Hibernate в реальный объект

0 голосов
/ 20 августа 2013

Вы столкнетесь с этой проблемой в связи с ленивым механизмом загрузки Hibernate. Hibernate оборачивает каждый объект, который лениво загружается в так называемый прокси-объект. Ваш объект x.a будет иметь тип HibernateProxy, когда вы загрузите x из базы данных.

Я нашел это решение полезным (похоже на @ Abdullah's).

Как снять прокси с объекта гибернации

Вы также можете охотно получить отношение x.a, чтобы избежать этой проблемы, следовательно, не будет создан прокси-объект.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...