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 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

你可能感兴趣的:(Hibernate lazy load data exception when hibernate session be auto closed)