问题描述
当我修改完了所有的获取 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 规范的注解。
解决方案
进过一系列的百度。总结如下:
- 将配置改成
fetch
改成FetchType.EAGER
。无果,启动的时候循环加载了配置文件,没有抛出错误。(循环加载原因未知,开启了 debug 日志都没有错误输出) - 在 get/set 方法加上
@Lazy(false)
。无果。没有效果,还是之前的错误
反思
- 将注解修改成 xml 的方式。可以启动成功。
- 观察发现 hibernate 也有相关的 lazy 的注解,偶然发现
@LazyToOne(LazyToOneOption.FALSE)
@LazyCollection(LazyCollectionOption.FALSE)
这2种写法都阻止掉懒加载了。
网友评论