2012-01-11 2 views
3

В сопоставлении hibernate я установил свойство lazy="false", и это позволяет получить все дочерние записи родителя.Настройка отображения Hibernate lazy = 'false'

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

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

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

ответ

6

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

+0

Спасибо за помощь. Поскольку я довольно новичок в спячке, вы могли бы рассказать мне, как это сделать? – Chillax

+0

Обновлен мой ответ. plz check – Pokuri

+0

@Pokuri, если я не сопоставляю дочерние свойства, тогда как я получу прокси? – wolverine

3

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

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

Спасибо за помощь. Это невозможно сделать, поскольку это означает изменение большого количества кода, где это используется. Есть ли другая альтернатива? – Chillax

Смежные вопросы