мне нужна помощь, я использую пользовательский opensessioninviewfilter, расширив его, переопределяя метод doFilterInternal, сохраняю sessionFactory в статической переменной ThredLocal:
public static ThreadLocal<SessionFactory> current = new ThreadLocal<>();
в моем дао, проверяю, используется ли сессия sessionFactory вмой фильтр, я понимаю, что это не то же самое sessionFactory, есть два различных экземпляра,
DAO:
@Autowired
protected SessionFactory sessionFactory;
opensessionViewFilter.doFilterInternal MyClass.current.set (session);
Мой уровень обслуживания:
@Service("comiteService")
@Transactional
public class CommiteServiceImpl implements CommiteService{
@Autowired
CommiteDao dao;
Web.xml:
<filter>
<filter-name>hibernateFilter</filter-name>
<filter-class>org.web.filter.MyOpenViewInSession</filter-class>
<init-param>
<param-name>sessionFactoryBeanName</param-name>
<param-value>sessionFactory</param-value>
</init-param>
<init-param>
<param-name>singleSession</param-name>
<param-value>true</param-value>
</init-param>
</filter>
applicationContext.xml:
<bean id="sessionFactory" class="org.springframework.orm.hibernate4.LocalSessionFactoryBean" >
<property name="dataSource" ref="dataSource"/>
<property name="packagesToScan" value="org.entity"/>
<property name="hibernateProperties">
<props>
<prop key="hibernate.dialect">${hibernate.dialect}</prop>
<prop key="hibernate.show_sql">${hibernate.show_sql:true}</prop>
<prop key="hibernate.format_sql">${hibernate.format_sql:true}</prop>
<prop key="hibernate.cache.use_second_level_cache" >false</prop>
<prop key="hibernate.cache.region.factory_class" >org.hibernate.cache.ehcache.EhCacheRegionFactory</prop>
<prop key="org.hibernate logging">ALL</prop>
<prop key="net.sf.Ehcache.configurationResourceName">/Ehcache.xml</prop>
<!-- <prop key="hibernate.enable_lazy_load_no_trans"> true</prop> -->
<prop key="spring.jpa.properties.hibernate.generate_statistics" >true</prop>
<prop key="hibernate.current_session_context_class">thread</prop>
</props>
</property>
</bean>
в моем DAO я проверяю следующееесли sessionFactory такой же, как в фильтре, или отличается:
if(System.identityHashCode(getSessionFactory()) == System.identityHashCode(MyClass.current))
System.out.println("sessionfactory is same");
else System.out.println("SessionFactory are not same");
, вывод был: "SessionFactory не совпадают"