Spring Hibernate OpenSessionInViewFilter - PullRequest
       11

Spring Hibernate OpenSessionInViewFilter

0 голосов
/ 30 ноября 2018

мне нужна помощь, я использую пользовательский 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 не совпадают"

...