Hibernate, запись доменных объектов в интерфейс для отложенной загрузки - PullRequest
0 голосов
/ 03 августа 2011

Почему hibernate требует, чтобы его сущности записывались в интерфейс для корректной работы с отложенной загрузкой?

1 Ответ

4 голосов
/ 03 августа 2011

Единственный сценарий, где hibernate требует интерфейсов, - это коллекции.Это потому, что hibernate использует свои собственные реализации коллекций для отложенной загрузки - PersistentBag, PersistentSet и т. Д. И присваивает их вашим полям.Реализации содержат ссылку на сеанс, чтобы они могли заполнять свои данные всякий раз, когда это необходимо.

Hibernate может назначить PersistentSet на private Set<Foo> set; (они делают это с отражением), но это невозможно сделатьдля private HashSet<Foo> set;, поскольку PersistentSet не расширяется HashSet

Что касается ленивых @*ToOne ассоциаций - hibernate создает прокси-объект, используя javassist (или cglib), и для него не требуется интерфейс.В любом случае, это редко используемая функция, и прокси является подклассом реального объекта, поэтому, если вы не используете getclass() (что не следует делать), он работает нормально.

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