spring boot jpa org.hibernate.LazyInitializationException

我们在使用spring boot jpa 框架的时候会遇到懒加载异常 org.hibernate.LazyInitializationException: failed to lazily initialize a collection of role: com.emall.entity.Category.childList, could not initialize proxy - no Session,本质都是hibernate的sesison操作数据库,默认sesison会提前关闭,报延迟加载…异常,要等到后台值返回到视图层之后,才关闭sesison才合理;

我们可以在配置类里面这样设置

spring.jpa.open-in-view=true

在spring boot启动器里面加入如下代码

@Bean
public OpenEntityManagerInViewFilter openEntityManagerInViewFilter() {
return new OpenEntityManagerInViewFilter();
}

注意:只有set集合才会懒加载

如果你进行单元测试那么必须在方法上加入@Transactional注解

@Test
@Transactional
public void contextLoads() {}

或者在application.properties中配置
这个配置的意思是即使不加@Transactional也会懒加载
spring.jpa.properties.hibernate.enable_lazy_load_no_trans=true

如果你不想使用懒加载的话一共有以下解决方法

  • 在实体类上加入@Proxy(lazy = false) 注解
  • 在一对多或者多对多方法上加入 fetch = FetchType.EAGER

@OneToMany(mappedBy = “department”, fetch = FetchType.EAGER)
private Set employees;

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值