Hibernate отключить выборку коллекции - PullRequest
2 голосов
/ 29 марта 2011

Использование последней версии Hibernate 3 ...

Имейте модель, в которой класс Element имеет 2 списка списков против класса Relation.Одно из них, где Элемент владеет (источниками) Отношения, а другое - когда оно является местом назначения.

 <class name="Element"....>
     ....

     <list name="sourceRelations" ....>
       ...
       <one-to-many class="...Relation" />
     </list>

     <list name="destinationRelations" ....>
       ...
       <one-to-many class="...Relation" />
     </list>
 </class>

 <class name="Relation"....>
     ....
     <many-to-one name="source" class="...Element" ...
        <column name="SOURCEID" sql-type="INTEGER" not-null="true" />
     </many-to-one>
     <many-to-one name="destination" class="...Element" ...
        <column name="DESTINATIONID" sql-type="INTEGER" not-null="true" />
     </many-to-one>
 </class>

Отображение по существу полезно только при генерации запросов Критерии.В противном случае при получении элемента (только через критерии, а не через get / load) я никогда не хочу, чтобы Hibernate фактически выбирал коллекции Relation.Никогда.Прямо сейчас в моем коде я очищаю объекты Element перед тем, как возвращать их, создавая новый Element и передавая свойства, которые я хочу распространить (т.е. sourceRelation / destinationRelation никогда не передается).То же самое касается запросов критериев к объектам Relation.Свойства источника / назначения (т. Е. Элемента) очищаются.

Есть ли способ проксировать сущность Элемента через перехватчики Hibernate или использовать Tuplizer, чтобы принудительно заставить все сущности Элемента обнулять свойства sourceRelation / destinationRelation?

Ответы [ 2 ]

0 голосов
/ 01 июня 2011

Этот ответ напомнил мне о другом подходе, который позволит вам избежать использования подклассов.

Создайте конструктор, содержащий только те поля, которые вы хотите, и используйте его в своем HQL следующим образом:

select new Element(e.id,...) from Element e...

Я добавляю второй ответ, поскольку этот подход отличается от моего первого ответа.

0 голосов
/ 26 мая 2011

Отображение коллекций отношений как lazy = "true" не обеспечивает желаемого поведения?

Если это не так, то альтернативой является использование наследования классов. Имейте базовый класс для Element, у которого нет сопоставленных коллекций, для использования в таких случаях вы теперь вручную изменяете возвращаемые данные, а затем подкласс, который просто добавляет эти коллекции, чтобы использовать его, когда вам требуется больший объем данных.

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