Olá a todos.
Inicialmente eu recebia este (org.hibernate.LazyInitializationException: could not initialize proxy - no Session) erro ao chamar um get de alguma entidade com o FetchType=Lazy.
Bom pesquisando muito encontrei diversos artigos sobre OpenSessionInViewInterceptor e OpenSessionInViewFilter. Ambas as solução são apenas para o sistema rodando. Para teste unitários por exemplo elas não funcionam.
Então eu gostaria de implementar uma solução que funcionasse de vez. Pros dois sem problemas.
Encontrei links como estes que me mandaram criar Interceptors http://www.jroller.com/agileanswers/entry/opensessioninviewinterceptor_for_quartz_jobs_under
Foi o que fiz, No meu Spring.xml coloquei uma transaction e um hibernateinterceptor como o artigo mesmo diz.
Debugando ví que meu teste unitário realmente entra na classe HibernateInterceptor mas não executa nenhum método.
O que eu preciso é que este interceptor funcione para os lazys e pelo que entendi você tem que indicar um TransactionProxyFactoryBean para o bean que gera os daos no meu caso é um genericDao.
Mas de fato não funciona.
Alguem tem uma idéia.
Meu Spring.xml limpo depois de vários testes ficou assim
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:tx="http://www.springframework.org/schema/tx"
xmlns:util="http://www.springframework.org/schema/util"
xmlns:jee="http://www.springframework.org/schema/jee"
xmlns:aop="http://www.springframework.org/schema/aop"
xmlns:mvc="http://www.springframework.org/schema/mvc"
xmlns:context="http://www.springframework.org/schema/context"
xsi:schemaLocation="http://www.springframework.org/schema/mvc
http://www.springframework.org/schema/mvc/spring-mvc-3.0.xsd
http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans-3.0.xsd
http://www.springframework.org/schema/tx
http://www.springframework.org/schema/tx/spring-tx-2.5.xsd
http://www.springframework.org/schema/util
http://www.springframework.org/schema/util/spring-util-2.5.xsd
http://www.springframework.org/schema/jee
http://www.springframework.org/schema/jee/spring-jee-2.5.xsd
http://www.springframework.org/schema/aop
http://www.springframework.org/schema/aop/spring-aop-2.5.xsd
http://www.springframework.org/schema/context
http://www.springframework.org/schema/context/spring-context-2.5.xsd"
default-autowire="byName">
<bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource" destroy-method="close">
<property name="driverClassName" value="${hibernate.connection.driver_class}" />
<property name="url" value="${hibernate.connection.url}" />
<property name="username" value="${hibernate.connection.username}" />
<property name="password" value="${hibernate.connection.password}" />
</bean>
<bean id="hibernateProperties" class="org.springframework.beans.factory.config.PropertiesFactoryBean">
<property name="locations">
<value>classpath:hibernate.properties</value>
</property>
</bean>
<bean class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer">
<property name="properties" ref="hibernateProperties" />
</bean>
<bean id="sessionFactory" class="org.springframework.orm.hibernate3.annotation.AnnotationSessionFactoryBean">
<property name="dataSource" ref="dataSource" />
<property name="hibernateProperties" ref="hibernateProperties" />
<property name="packagesToScan">
<list>
<value>br.unimed.entity</value>
</list>
</property>
</bean>
<bean id="transactionManager" class="org.springframework.orm.hibernate3.HibernateTransactionManager">
<property name="sessionFactory">
<ref bean="sessionFactory"/>
</property>
</bean>
<bean id="hibernateInterceptor" class="org.springframework.orm.hibernate3.HibernateInterceptor">
<property name="sessionFactory">
<ref bean="sessionFactory"/>
</property>
</bean>
<context:component-scan base-package="br.unimed.controller" />
<context:component-scan base-package="br.unimed.dao" />
<context:component-scan base-package="br.unimed.business" />
<context:component-scan base-package="br.unimed.converter" />
<aop:aspectj-autoproxy proxy-target-class="true"/>
</beans>
Minha genericDao não passa de uma implementação de HibernateDaoSupport anotado com @Repository(value = “genericDao”).
Alguem tem uma luz, pra me dar se possivel, valeo