Параметр отображения гибернации lazy = 'false'

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

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

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

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


person Chillax    schedule 11.01.2012    source источник


Ответы (2)


В спящем режиме такой функции нет, поскольку она учитывает ваш 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 везде, где вам нужен только родительский объект. надеюсь, ты понял!

person Pokuri    schedule 11.01.2012
comment
Спасибо за помощь. Поскольку я новичок в спящем режиме, не могли бы вы рассказать мне, как это сделать? - person Chillax; 11.01.2012
comment
@Pokuri, если я не сопоставлю дочерние свойства, то как я получу прокси? - person wolverine; 06.08.2014
comment
@Pokuri, ты можешь ответить на мой вопрос? - person wolverine; 11.09.2014

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

SELECT mag FROM Magazine mag JOIN FETCH mag.articles WHERE mag.id = 1
person Wacław Borowiec    schedule 11.01.2012
comment
Спасибо за помощь. Это невозможно сделать, так как это означает изменение большого количества кода, где это используется. Есть ли другая альтернатива? - person Chillax; 11.01.2012