`

79. could not initialize proxy - no Session 【从零开始学Spring Boot】

阅读更多

 

【视频&交流平台】

à SpringBoot视频

http://study.163.com/course/introduction.htm?courseId=1004329008&utm_campaign=commission&utm_source=400000000155061&utm_medium=share

à SpringCloud视频

http://study.163.com/course/introduction.htm?courseId=1004638001&utm_campaign=commission&utm_source=400000000155061&utm_medium=share

à Spring Boot源码

https://gitee.com/happyangellxq520/spring-boot

à Spring Boot交流平台

http://412887952-qq-com.iteye.com/blog/2321532

 

【原创文章,转载请注明出处】

       SpringJPA结合时,如何解决懒加载no session or session was closed!!!

       实际上Spring Boot是默认是打开支持session view filter的,所以大家正常应该是不会发现有这个问题的,但是还是有人提出了,好吧,如果真的碰到的话,那么可以按照如下尝试解决下。

       我们先看看有这么几个类(省略一些代码,只提供核心的):

Teacher:

@Entity

public class Teacher {

    @Id @GeneratedValue

    private long id;

    private String teaName;

}

 

Student:

@Entity

public class Student {

    @Id@GeneratedValue

    private long id;

    private String stuName;

   

    @ManyToOne(fetch = FetchType.LAZY)

    private Teacher classTeacher;

}

 

StudentRepository:

public interface StudentRepository  extends CrudRepository<Student,Long>{

   

}

 

访问控制器:

@RequestMapping("/hello")

    public String hello(Map<String,Object> map){

       map.put("student",studentRepository.findOne(1L));

       return "/hello";

    }

访问/hello那么如果出现如下异常信息:

org.hibernate.LazyInitializationException: could not initialize proxy - no Session

       那么可以这是由于我们使用懒加载加载数据的方法,当我们要获取的数据的时候,但是session已经关闭了,我们支持在Spring MVC中需要配置一个OpenEntityManagerInViewFilter 过滤器,Spring针对Hibernate的非JPA实现用的是OpenSessionInViewFilter,那么在Spring Boot中怎么支持呢?

特别特别的简单,只需要在application.properties中加入如下配置:

spring.jpa.open-in-view=true

 

这么一个配置即可支持,默认这个值就为true

 

  

Spring Boot 系列博客】

视频&交流平台

à Spring Boot网易云课堂视频

http://study.163.com/course/introduction.htm?courseId=1004329008

à Spring Boot交流平台

http://412887952-qq-com.iteye.com/blog/2321532

 

网易云课堂视频最新更新

第十一章 Spring Boot 日志

1、spring boot日志—理论

2、Spring Boot日志-logback

3、Spring Boot日志-log4j2

第十二章 Spring Boot 知识点2

1、spring boot 服务配置和部署

2、Spring Boot 定制URL匹配规则

 

 

历史章节

 

第一章 快速开始

1、Spring Boot之Hello World

2、Spring Boot之Hello World访问404

 

第二章 Spring Boot之JSON

1、spring boot返回json数据

2、Spring Boot完美使用FastJson解析JSON数据

 

第三章 Spring Boot热部署

1、Spring Boot热部署(springloader)

2、springboot + devtools(热部署)

 

第四章 Spring Boot数据库

1、Spring Boot JPA/Hibernate/Spring Data概念

2、Spring Boot JPA-Hibernate

3、Spring Boot Spring Data JPA介绍

4、Spring Boot JdbcTemplate

5、Spring Boot集成MyBatis

 

第五章 web开发

1、全局异常捕捉

2、配置server信息

3、spring boot使用thymeleaf

4、Spring Boot 使用freemarker

5、Spring Boot添加JSP支持

 

第六章 定时任务

1、Spring Boot定时任务

2、Spring Boot 定时任务升级篇(动态修改cron参数)

3、Spring Boot 定时任务升级篇(动态添加修改删除定时任务)

4、Spring Boot 定时任务升级篇(集群/分布式下的定时任务说明)

5、Spring Boot Quartz介绍

6、Spring Boot Quartz在Java Project中使用

7、Spring Boot 集成Quartz普通使用

8、Spring Boot 集成Quartz升级版

9、Spring Boot 集成Quartz二次升级版

10、Spring Boot 集成Quartz-Job如何自动注入Spring容器托管的对象

 

第七章 Spring Boot MyBatis升级篇

1、Spring Boot MyBatis升级篇-注解

2、Spring Boot MyBatis升级篇-注解-自增ID

3、Spring Boot MyBatis升级篇-注解-增删改查

4、Spring Boot MyBatis升级篇-注解-分页查询

5、Spring Boot MyBatis升级篇-注解-分页PageHelper不生效

6、Spring Boot MyBatis升级篇-注解- mybatic insert异常:BindingException: Parameter 'name' not found

7、Spring Boot MyBatis升级篇-注解- #和$符号特别篇

8、Spring Boot MyBatis升级篇-注解-@Result

9、Spring Boot MyBatis升级篇-注解-动态SQL(if test)-方案一:<script>

10、Spring Boot MyBatis升级篇-注解-动态SQL(if test)-方案二:@Provider

11、Spring Boot MyBatis升级篇-注解-动态SQL-参数问题

12、Spring Boot MyBatis升级篇-注解-特别篇:@MapperScan和@Mapper

13、Spring Boot MyBatis升级篇-XML

14、Spring Boot MyBatis升级篇-XML-自增ID

15、Spring Boot MyBatis升级篇-XML-增删改查

16、Spring Boot MyBatis升级篇-XML-分页查询

17、Spring Boot MyBatis升级篇-XML-分页PageHelper不生效

18、Spring Boot MyBatis升级篇-XML-动态SQL(if test)

19、Spring Boot MyBatis升级篇-XML-注解-初尝试

20、Spring Boot MyBatis升级篇- pagehelper替换为pagehelper-spring-boot-starter

 

第八章 Spring Boot 知识点1

1、Spring Boot 拦截器HandlerInterceptor

2、Spring Boot启动加载数据CommandLineRunner

3、Spring Boot环境变量读取和属性对象的绑定

4、Spring Boot使用自定义的properties

5、Spring Boot使用自定义的properties

6、Spring Boot使用@SpringBootApplication

7、Spring Boot 监控和管理生产环境

 

第十章 Spring Boot 打包部署

1、Spring Boot打包部署((提供Linux的sh文件))

 

第十一章 Spring Boot 日志

1、spring boot日志—理论

2、Spring Boot日志-logback

 

3、Spring Boot日志-log4j2

 

分享到:
评论
3 楼 qwfys200 2017-07-21  
多对多映射中有一个是关系维护方,另一个是关系被维护方,需要在关系被维护方中添加
@ManyToMany(mappedBy = "roles"),对于多对多映射来说,任何一方都可以是关系维护方,只要在整个程序中保持一致就可以避免循环引用问题。
2 楼 dongdongmian 2017-03-27  
博主你好,我也遇到这样的问题。
我的报错信息是:
org.codehaus.jackson.map.JsonMappingException: failed to lazily initialize a collection of role: com.heritage.domain.SysPermission.roles, could not initialize proxy - no Session (through reference chain: java.util.ArrayList[0]->com.heritage.domain.SysPermission["roles"])
1 楼 chengjf0526 2017-03-22  
我就遇到了该问题
我在操作39.1,39.2,39.3的例子时遇到的
大致是这样的(无关代码已经省去):
# UserInfo.java
public class UserInfo implements Serializable {
    /**
     * 用户角色列表
     */
    @ManyToMany(fetch = FetchType.EAGER)//立即从数据库中进行加载数据;
    @JoinTable(name = "SysUserRole", joinColumns = {@JoinColumn(name = "uid")}, inverseJoinColumns = {@JoinColumn(name = "roleId")})
    private List<SysRole> roleList;
}
# SysRole.java
public class SysRole implements Serializable {
    /**
     * 角色 -- 权限关系:多对多关系;
     */
    @ManyToMany(fetch = FetchType.EAGER)
    @JoinTable(name = "SysRolePermission", joinColumns = {@JoinColumn(name = "roleId")}, inverseJoinColumns = {@JoinColumn(name = "permissionId")})
    private List<SysPermission> permissions;

    /**
     * 用户 - 角色关系定义;
     */
    @ManyToMany
    @JoinTable(name = "SysUserRole", joinColumns = {@JoinColumn(name = "roleId")}, inverseJoinColumns = {@JoinColumn(name = "uid")})
    private List<UserInfo> userInfos;// 一个角色对应多个用户
}
# SysPermission.java
public class SysPermission implements Serializable {
    @ManyToMany
    @JoinTable(name = "SysRolePermission", joinColumns = {@JoinColumn(name = "permissionId")}, inverseJoinColumns = {@JoinColumn(name = "roleId")})
    private List<SysRole> roles;
}

执行登陆时,会出现本章提到问题,按照本章修改了配置文件
# application.yml
spring:
  jpa:
    open-in-view: true
依然没有解决问题
我试着把所有@ManyToMany改成@ManyToMany(fetch = FetchType.EAGER),结果会因为循环引用导致系统崩坏,请问博主有什么样的建议,谢谢

相关推荐

    集成spring的hibernate懒加载

    解决org.hibernate.LazyInitializationException: could not initialize proxy - no Session...

    Could not initialize class net.sf.jasperreports.engine.util.JRStyledTextParser

    NULL 博文链接:https://smartgwt.iteye.com/blog/1252268

    spring-boot-reference.pdf

    Spring Boot Documentation 1. About the Documentation 2. Getting Help 3. First Steps 4. Working with Spring Boot 5. Learning about Spring Boot Features 6. Moving to Production 7. Advanced Topics II. ...

    S2S3H3整合以及泛型Dao与Service封装

    2.2.3.1+spring-framework-3.1.0+hibernate-distribution-3.6.8+JSON+MySQL+Annotation,并且对Dao和Service进行了封装,内含.jar包,并且解决了一对多双向关联的could not initialize proxy - no Session错误,同时...

    mysql-8.0.18-1.el7.x86_64.zip

    mysqld --initialize 初始化 chown mysql:mysql /var/lib/mysql -R 授权 systemctl start mysqld 开启mysql服务 systemctl status mysqld 查看mysql 状态 cat /var/log/mysqld.log | grep password 查看root初始...

    java串口所需依赖dll文件合集

    监听COM口启动程序报错 Could not initialize class gnu.io.RXTXCommDriver异常 是因为需要在%JAVA_HOME%/jre/bin目录中添加rxtxParallel.dll、rxtxSerial.dll文件

    jacob_1.14.3.rar

    内涵jacob_1.14.3-x64.dll;jacob_1.14.3-64.jdk(maven地址);解决方法:Could not initialize class com.jacob.com.ComThread

    rsh软件(LoadRunner监控Linux)

    Cannot initialize the monitoring on 192.168.52.189. Error while creating the RPC client. Ensure that the machine can be connected and that it runs the rstat daemon (use rpcinfo utility for this ...

    vcruntime140_1.zip

    由于找不到vcruntime140_1.dll,无法继续执行代码。解决方法:将缺失的文件`vcruntime140_1.dll`复制到C:\Windows\System32目录下(32位操作系统需复制到C:\Windows\SysWOW64)即可解决。

    Plsql Developer连接Oracle时出现Could not initialize oci.dll解决方案

    主要介绍了Plsql Developer连接Oracle时出现Could not initialize oci.dll解决方案,需要的朋友可以参考下

    重新编译打包的XmlSchema.1.1.1.jar和xfire-all1.2.6.jar

    为了解决spring整合cxf,xfire遇到的jar包冲突问题,将XmlSchema.1.1.1.jar和xfire-all1.2.6.jar修改后进行了重新编译打包

    oracle_plsql连服务端时 Initialization error could initialize错误处理方法

    解决:oracle_plsql连服务端时 Initialization error could initialize错误处理方法

    derby.jar 。。

    java.lang.NoClassDefFoundError: Could not initialize class org.apache.derby.jdbc.AutoloadedDriver40 导致的原因: 在azkaban的server和executor中缺少一个叫derby.jar的包

    Android代码-RetrofitUrlManager

    // When building OkHttpClient, the OkHttpClient.Builder() is passed to the with() method to initialize the configuration OkHttpClient = RetrofitUrlManager.getInstance().with(new OkHttpClient.Builder...

    基于SSH框架的BBS论坛JavaEE项目源码

    7.注册如果发送邮件激活的方式出错(返回页面错误org.hibernate.LazyInitializationException: could not initialize proxy - no Session) 8.禁止用户后不允许登录、发帖、回帖等 9.后台会员搜索中文名搜索乱码 ...

    linux上实现视频截图

    使用javacpp技术,在32位linux系统上实现视频截图功能,注意so文件放在liberary_path里面

    FlexGraphics_V_1.79_D4-XE10.2_Downloadly.ir

    - FIX: The TFlexPanel.FindControlAtPoint method maked virtual to realize RealTime-capability when on mouse cursor moving the flex-object search not occurs. - FIX: After deleting the selected points ...

    Mysql 8免安装版配置步骤

    7. 执行mysqld --initialize-insecure --user=mysql创建无密码root用户 8. 执行net start mysql 如果返回发生系统错误 193。删除bin文件夹的mysqld文件,无后缀名的文件 9. 执行mysql -u root -p,下行会弹出Enter ...

    mysql-8.0.13-winx64-4.zip

    最新版的mysql8精简版使用 mysql-8.0.13-winx64-4.zip 启动方式为: 先初始化 ./mysqld.exe --initialize-insecure --user=mysql 再启动 .\mysqld.exe --console

    wpf地震体浏览工具(源码)

    segybinaryheader.AddInfo("43-44", (segyBinaryHeader.hstas).ToString(), "有斜坡时,为起始斜坡长度(斜坡起始于时间零,使用时间为该长度)。以 ms 表示。"); segybinaryheader.AddInfo("45-46", ...

Global site tag (gtag.js) - Google Analytics