Настройка отображения спящего режима lazy = 'false' - PullRequest
4 голосов
/ 11 января 2012

В отображении гибернации я установил свойство lazy="false", и при этом выбираются все дочерние записи родителя.

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

Я не могу изменить свойство lazy на true, так как оно используется во многих других местах. Есть ли способ это исправить?

Дайте мне знать, если потребуется дополнительная информация.

Ответы [ 2 ]

6 голосов
/ 11 января 2012

Это не такая особенность в спящем режиме, поскольку она уважает ваше lazy="false". Итак, что я могу предложить для удовлетворения ваших требований, так это расширить ваш класс запросов другим фиктивным конкретным классом и определить отображение для этого класса без этой дочерней ассоциации.

скажем, у вас есть класс Parent с дочерним отображением

class Parent{

     private List<Child> kids;

}

и отображение для Родителя у вас есть

<class name="Parent" table="PARENT">
// other properties
// child mapping
   <set name="kids" table="KIDS" lazy="false">
       <key column="parent_id"/>
       <one-to-many class="Child"/>
   </set>
</class>

Затем вы можете создать другой класс, который расширяет родительский класс

class MinimalParent extends Parent{
   // leave implementation as blank
}

Затем отобразите это как ниже

<class name="MinimalParent" table="PARENT">
    // other properties
    // do not map child in this
</class>

И используйте этот класс MinimalParent везде, где вам нужен только родительский объект. надеюсь, что вы получили это!

3 голосов
/ 11 января 2012

Вы, вероятно, должны установить lazy = "true", чтобы выбрать только родительский элемент по умолчанию, и использовать JPQL-запросы с "выборочным соединением", чтобы выбрать родительский элемент вместе с дочерними элементами, где бы это ни требовалось, например ::100100

SELECT mag FROM Magazine mag JOIN FETCH mag.articles WHERE mag.id = 1
...