zoukankan      html  css  js  c++  java
  • 关于Web项目出现懒加载异常的解决方案

    manytomany关系中,使用 fetch = FetchType.LAZY 来做懒加载,加快些性能。但是却一直出错,原因是session被关闭,要保持session,需要事务。

    • Hibernate
    1. 使用xml配置文件
      <!-- 配置opensessionInViewFilter 用于解决懒加载问题-->
        <filter>
           <filter-name>OpenSessionInViewFilter</filter-name>
           <filter-class>org.springframework.orm.hibernate3.support.OpenSessionInViewFilter</filter-class>
        </filter>
      <filter-mapping>
          <filter-name>openSessionInViewFilter</filter-name>
          <url-pattern>/*</url-pattern>
      </filter-mapping>
    2. 使用的是Java配置
      /**
       * 处理hibernate的懒加载异常,延长hibernate的session再回话结束后关闭
       * @Title: customOpenEntityManagerInViewFilter 
       * @Description: TODO
       * @return FilterRegistrationBean
       * @throws
       */
      @Bean
      public FilterRegistrationBean OpenSessionInViewFilter() {
        FilterRegistrationBean registration = new FilterRegistrationBean();
        registration.setFilter(new OpenSessionInViewFilter());
        registration.addUrlPatterns("/*");
        registration.setName("openSessionInViewFilter");
        registration.setOrder(1);//设置优先级,必须大于shiro的fiter,不然会出现session周期的问题
        return registration;
      }
    • JPA
    1. 使用xml配置文件
      <!--在页面开启session,解决懒加载异常的问题-->
      <filter>
          <filter-name>OpenEntityManagerInViewFilter</filter-name>
          <filter-class>org.springframework.orm.jpa.support.OpenEntityManagerInViewFilter</filter-class>
      </filter>
      <filter-mapping>
          <filter-name>openEntityManagerInViewFilter</filter-name>
          <url-pattern>/*</url-pattern>
      </filter-mapping>
    2. 使用的是Java配置
      /**
       * @Description: 处理JPA的懒加载异常,延长hibernate的session再回话结束后关闭
       * @Title: customOpenEntityManagerInViewFilter
       * @throws
       * @return FilterRegistrationBean
       */
      @Bean
      public FilterRegistrationBean customOpenEntityManagerInViewFilter() {
          FilterRegistrationBean registration = new FilterRegistrationBean();
          registration.setFilter(new OpenEntityManagerInViewFilter());
          registration.addUrlPatterns("/*");
          registration.setName("openEntityManagerInViewFilter");
          registration.setOrder(1);// 设置优先级,必须大于shiro的fiter,不然会出现session周期的问题
          return registration;
      }
  • 相关阅读:
    使用 @Autowired 的时候,到底是写接口还是实现类?
    socket的简单例子
    java 将文件夹所有的文件合并到指定的文件夹下
    java 复制某一文件夹下的所有文件到另一个文件夹下
    java Date日期总结的一些转换的方法
    java 可排序的数值得字符串,转化成list集合后进行的排序的几种方法
    java 查看文件的大小的方法
    java 从一个总的list集合中,去掉指定的集合元素,得到新的集合
    java 可拆成数组的字符串,去掉重复元素的一种方法
    将博客搬至CSDN
  • 原文地址:https://www.cnblogs.com/onlymate/p/7543504.html
Copyright © 2011-2022 走看看