Использование OpenSessionInViewInterceptor с Hibernate и JSF 2 - PullRequest
2 голосов
/ 14 июня 2010

Я создаю приложение в Hibernate, Spring и JSF2, используя только аннотации.Как я могу использовать преимущества OpenSessionInViewInterceptor, найденного в Spring, для перехвата любого сеанса гибернации, который может открыться внутри компонента?

Я пытаюсь элегантно решить типичную проблему «не удалось лениво инициализировать коллекцию ролей: your.Class.assocation ни один сеанс или сеанс не был закрыт». Проблема при попытке чтения из еще не инициализированного списка POJOвнутри другого POJO (объект Tag, полученный DAO, который содержит список объектов Project, которые я хочу прочитать).Я нашел это:
http://www.paulcodding.com/blog/2008/01/21/using-the-opensessioninviewinterceptor-for-spring-hibernate3/
, но не смог использовать его в моей среде.

Пожалуйста, предоставьте подробный ответ, так как Интернет полон туманных, бесполезных учебников.Я также буду признателен за альтернативное решение, учитывая пошаговую инструкцию.

1 Ответ

3 голосов
/ 14 июня 2010

Оказалось, что все довольно просто, намного проще, чем перехватчики, АОП и множество странностей, которые можно найти по всему интернету.Вставьте этот фрагмент (обратите внимание на мой маленький комментарий во втором init-param) в ваш web.xml, чтобы забыть все ваши проблемы.

<!-- Hibernate OpenSession Filter -->
<filter>
    <filter-name>hibernateFilter</filter-name>
    <filter-class>org.springframework.orm.hibernate3.support.OpenSessionInViewFilter</filter-class>
    <init-param>
        <param-name>singleSession</param-name>
        <param-value>true</param-value>
    </init-param>
    <init-param>
        <param-name>sessionFactoryBeanName</param-name>
        <param-value>***WhateverTheNameOfYourSessionFactoryBeanIs***</param-value>
    </init-param>
</filter>
<filter-mapping>
    <filter-name>hibernateFilter</filter-name>
    <url-pattern>/*</url-pattern>
</filter-mapping>
...