Hibernate lazy load data exception when hibernate session be auto closed

问题描述

当我修改完了所有的获取 hibernate 的获取 session 的方法的时候。启动都没有问题。但是在某些功能使用到了hibernate 的一对多的时候。把数据库查询的结果输出到界面时发生异常。就想不使用懒加载了。

failed to lazily initialize a collection of role: com.youcompanydomain.auto.entity.user.roles, no session or session was closed

实体类配置如下

@OneToMany(fetch = FetchType.LAZY,mappedBy="role_id",targetEntity = Roles.class, cascade = {CascadeType.REFRESH, CascadeType.MERGE})
private List<Role> roles;

其中 @OneToMay 使用的是 JPA 规范的注解。

解决方案

进过一系列的百度。总结如下:

  1. 将配置改成 fetch 改成 FetchType.EAGER。无果,启动的时候循环加载了配置文件,没有抛出错误。(循环加载原因未知,开启了 debug 日志都没有错误输出)
  2. 在 get/set 方法加上 @Lazy(false)。无果。没有效果,还是之前的错误

反思

  1. 将注解修改成 xml 的方式。可以启动成功。
  2. 观察发现 hibernate 也有相关的 lazy 的注解,偶然发现
@LazyToOne(LazyToOneOption.FALSE)
@LazyCollection(LazyCollectionOption.FALSE)

这2种写法都阻止掉懒加载了。

文章出自 http://lsof.fun

最后编辑于 :
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

  • 在一个方法内部定义的变量都存储在栈中,当这个函数运行结束后,其对应的栈就会被回收,此时,在其方法体中定义的变量将不...
    Y了个J阅读 4,635评论 1赞 14
  • Spring Boot 参考指南 介绍 转载自:https://www.gitbook.com/book/qbgb...
    毛宇鹏阅读 47,415评论 6赞 342
  • Spring核心功能 DI(IOC) 何谓DI(IOC) DI(依赖注入)是spring的核心功能之一。Depen...
    尘世的鱼阅读 4,064评论 1赞 11
  • 家的意义 家对于你的意义是什么? 家对于奥德修斯来说,历经10年漂泊依旧要回到的家园;家对于郝思嘉来说,那...
    秋天里爱幻想的猫阅读 269评论 0赞 0
  • 虽然是90后,但年纪也快奔二了,说什么追星也有点儿科,但我想说我从一开始就不觉得自己是追星,我的偶像是Ladyga...
    磊石惹阅读 265评论 2赞 1

友情链接更多精彩内容