2015-10-10 3 views
0

Я новичок в спящем режиме. Может кто-нибудь, пожалуйста, помогите мне в следующемhibernate ленивый вопрос об инициализации

Мое приложение использует весну и зимуют. В файле hbm.xml я использую lazy = true и fetch = join.

У меня есть 10000 родительских объектов, которые я выполняю с использованием цикла for. Внутри цикла for я вызываю дочерние объекты, выполняя parent.toString(); toString переопределяется.

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

+0

Я попробовал разные выборки, а также пытались сделать ленивую = ложь, но результаты были медленными – Enosh

+0

я думаю, что вы можете оптимизировать его, да, но, по крайней мере для меня это немного сложно оценить, а также предложить альтернативу, если вы не публикуете какой-либо код ... Спасибо. – lrnzcig

ответ

0

Никогда не запускайте запрос внутри цикла. Вместо этого вы можете получить все дочерние из всех родителей, выполнив следующие шаги.

Создать метод в Hibernate DAO и передать присоединиться свойство в функции ИЛИ вы можете отправить массив joinproperties Например:

public findAllRecord(Class persistentClass, String joinproperty) // For array (String[] joinproperty) 
    { 
     Criteria criteria = session.createCriteria(persistentClass);  criteria.setResultTransformer(CriteriaSpecification.DISTINCT_ROOT_ENTITY); 
     criteria.setFetchMode(joinproperty, FetchMode.JOIN); 
     return criteria.list(); 
    } 

Вы можете добавить ограничение в выше critera как:

// Добавить ваше ограничение критерии здесь, и вы можете передать свойство в вышеупомянутой функции также, например:

criteria.add(Restrictions.eq(propertyName, name)); 

выше имя и ИмениСвойства вы можете пройти через динамически.

Теперь вызовите вышеуказанный метод, передав свойство join; Например:

class Parent{ 

    private int id; 
    private String name; 
    private Child child; 

} 

class Child{ 

    // Child property 
} 

Вызов метода будет .... как.

String joinproperty="child"; // Property of Parent class which you want to join 
findAllRecord(Parent.class, String joinproperty) 

Надеется, что это поможет вам ...

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