Правильное использование getHibernateTemplate () в приложении Spring MVC? - PullRequest
0 голосов
/ 03 января 2011

В моем приложении Spring MVC есть несколько отображенных объектов Hibernate.По умолчанию, кажется, ленивая загрузка вложенных объектов с отношениями.Я понял это, получив множество ошибок в моем JSP при доступе, например, к списку дочерних объектов.

Поэтому я реализовал второй метод, чтобы получить список объектов со всеми инициализированными дочерними объектами.Мне было интересно, может ли кто-нибудь дать мне обратную связь, если это был путь или нет?

Это мой код в моей реализации DAO, который работает:

public List<Address> getTripListFullyInitliazed() {

    HibernateTemplate template = getHibernateTemplate();

    List<Address> addresses = template.loadAll(Address.class);
    for (Address address : address) {
        template.initialize(address.getChildren());
    }
    return addresses;   
}

Может кто-нибудь сказать, пожалуйстамне, если это нормально, или я должен что-то изменить?

Ответы [ 2 ]

3 голосов
/ 03 января 2011

Я думаю, что более элегантным подходом было бы использование предложения HQL JOIN FETCH, так как оно минимизирует количество выполненных SQL-запросов и делает ваш код более понятным:

public List<Address> getTripListFullyInitliazed() {
    return getHibernateTemplate().find(
        "from Address a left join fetch a.children");
}

Смотрите также:

2 голосов
/ 03 января 2011

Я думаю, что стандартное решение этой проблемы - использовать OpenSessionInViewFilter:

Фильтр сервлета 2.3, который связывает Hibernate Session с потоком для всей обработкизапроса.Предназначен для шаблона «Открыть сеанс в представлении», то есть для обеспечения отложенной загрузки в веб-представлениях, несмотря на то, что исходные транзакции уже завершены.

Этот фильтр делает сеансы Hibernate доступными через текущий поток, который будет автоматически определятьсяменеджеры транзакций.Он подходит для транзакций уровня обслуживания через HibernateTransactionManager или JtaTransactionManager, а также для нетранзакционного выполнения (если настроено соответствующим образом).

...