SpringBoot JPA懒加载失效的解决方案(亲测有效)

SpringBoot JPA懒加载失效

使用springBoot JPA 对两个实体类进行双向关联,并设置了懒加载,如下:

然后在查询后用到了roles,会报错,

解决办法如下:

1. 在配置文件中加入:

spring.jpa.properties.hibernate.enable_lazy_load_no_trans =true

2. 如果你是在SpringBoot的测试类 中使用报错,则在方法上加入@Transactional注解

在百度查询时发现有人说 修改该配置: spring.jpa.open-in-view=true ,经测试,该项配置默认就是true,并且没有用。

JPA懒加载引起的bug

自己闲暇用JPA写了个ORM操作的练习,发现一个诡异的问题。

如下图

1:读取的产品product的实际库存stock是20,冻结库存frozenStock是0;

2:减少该产品实际库存5,冻结库存+5;

3:重新查询该产品

问题:两个单元校验,发现实际算出来的库存差值不是5是0!

博主通过查询商品信息findProductById()方法得到答案。如下图,调用方法返回的实体类product的属性都是null,F7进入调试才去查询产品的信息,查完之后才打印产品的名称,即类的"懒加载"。所以在步骤1之后,步骤2修改了库存,重新读取product的库存已经是扣减过的15了。

解决:

在实体类上加上@Proxy(lazy = false)取消懒加载,直截了当(暂时没想到别的)

以上为个人经验,希望能给大家一个参考,也希望大家多多支持我们。

(0)

相关推荐

  • springboot 中 druid+jpa+MYSQL数据库配置过程

    Druid来自于阿里的一个开源连接池能够提供强大的监控和扩展功能,Spring Boot默认不支持Druid和jpa,需要引入依赖. 1.引入依赖包 <!--druid--> <!-- https://mvnrepository.com/artifact/com.alibaba/druid --> <dependency> <groupId>com.alibaba</groupId> <artifactId>druid</art

  • Springboot使用Spring Data JPA实现数据库操作

    SpringBoot整合JPA 使用数据库是开发基本应用的基础,借助于开发框架,我们已经不用编写原始的访问数据库的代码,也不用调用JDBC(Java Data Base Connectivity)或者连接池等诸如此类的被称作底层的代码,我们将从更高的层次上访问数据库,这在Springboot中更是如此,本章我们将详细介绍在Springboot中使用 Spring Data JPA 来实现对数据库的操作. JPA & Spring Data JPA JPA是Java Persistence API

  • springboot jpa 延迟加载问题的2种解决

    springboot jpa 延迟加载问题 在springboot中,在application.properties的配置文件中新增spring.jpa.open-in-view=true方法失效 经过测试,有两种解决办法: 1.在application.properties的配置文件中新增 spring.jpa.properties.hibernate.enable_lazy_load_no_trans=true: 2.在测试的方法上添加@Transactional注解. 关于springbo

  • jpa介绍以及在spring boot中使用详解

    目录 1.什么是jpa呢? 2.jpa具有什么优势? 2.1标准化 2.2容器级特性的支持 2.3简单方便 2.4查询能力 2.5高级特性 3.基于注解的使用 3.1 JPA拥有哪些注解呢? 4.代码实战 4.1maven依赖 4.2配置文件 4.3创建实体以及数据访问接口 总结 1.什么是jpa呢? JPA顾名思义就是Java Persistence API的意思,是JDK 5.0注解或XML描述对象-关系表的映射关系,并将运行期的实体对象持久化到数据库中. 2.jpa具有什么优势? 2.1标

  • SpringBoot整合SpringDataJPA

    目录 SpringBoot整合JPA JPA & Spring Data JPA Hibernate & JPA 1.JPA 2.JPA & Hibernate 关系 Hibernate VS Mybatis 一.导入依赖 二.简单的CRUD 1.配置文件 2.实体类 3.Dao层 4.service层 5.controller 三.自定义SQL 四.分页查询 五.连表查询 六.分组查询 七.与mybatis对比 总结 SpringBoot整合JPA 使用数据库是开发基本应用的基础

  • SpringBoot JPA懒加载失效的解决方案(亲测有效)

    SpringBoot JPA懒加载失效 使用springBoot JPA 对两个实体类进行双向关联,并设置了懒加载,如下: 然后在查询后用到了roles,会报错, 解决办法如下: 1. 在配置文件中加入: spring.jpa.properties.hibernate.enable_lazy_load_no_trans =true 2. 如果你是在SpringBoot的测试类 中使用报错,则在方法上加入@Transactional注解 在百度查询时发现有人说 修改该配置: spring.jpa.

  • 如何解决hibernate一对多注解懒加载失效问题

    目录 hibernate一对多注解懒加载失效 经排查,问题出在controller这边 解决方法 Hibernate懒加载异常说明及其解决 懒加载异常出现的原因 解决方案1 解决方案2 解决方案3 hibernate一对多注解懒加载失效 在House类里有关联HouseInfo,设置了懒加载 但是页面ajax返回还是有HouseInfos的数据. 经排查,问题出在controller这边 @response注解启用jackson框架对House进行解析 然后调用了每个属性的get方法,自然hou

  • Spring集成JPA配置懒加载报错解决方案

    一:报错no session 因为entitymanager对象在事物提交后就关闭了 报错的 no session相当于sql的session 解决办法:解决办法 在web.xmL配置一个过滤器 使其在这个session中的manager在结束后再关闭open <!--配置openmanager--> <filter> <filter-name>openEntity</filter-name> <filter-class>org.springfr

  • 在springboot中实现个别bean懒加载的操作

    懒加载---就是我们在spring容器启动的是先不把所有的bean都加载到spring的容器中去,而是在当需要用的时候,才把这个对象实例化到容器中. @Lazy 在需要懒加载的bean上加上@Lazy就可以了 补充知识:springboot组件懒加载的坑及加载规则 什么是懒加载? 懒加载的意思是不在项目启动的时候实例出来这个组件 @RestController public class ApiController { @Autowired Skill kobSkillImpl; @Request

  • SpringBoot新特性之全局懒加载机制

    关于延迟加载 在 Spring 中,默认情况下所有定的 bean 及其依赖项目都是在应用启动时创建容器上下文是被初始化的.测试代码如下: @Slf4j @Configuration public class DemoConfig { public DemoConfig() { log.warn(" > > > demoConfig 被初始化 > > >"); } } 启动应用日志: [ main] o.a.c.c.C.[Tomcat].[localh

  • JPA @Basic单表查询如何实现大字段懒加载

    JPA @Basic单表查询实现大字段懒加载 近期看了JPA@Basic注解的使用,看到该注解可以设置字段的懒加载. 1.以前碰到的懒加载: 我们知道,多表关联的时候,我们是可以配置懒加载的,比如一个Company类,里面可以关联员工表,办公设备表,当我们查看公司信息的时候,我们并不需要直接加载员工表,办公设备表,只需要在用户查看员工,查看设备的时候再加载,这样可以提高加载效率. 长话短说,大概是这样子的 @Entity @Table(name = "Company") public

  • Mybatis如何实现关联属性懒加载

    Mybatis 关联属性懒加载 延迟加载配置 mybatis默认没有开启延迟加载,需要在config.xml中setting配置. lazyLoadingEnabled:true使用延迟加载,false禁用延迟加载,默认为false. aggressiveLazyLoading:true启用时,当延迟加载开启时访问对象中一个懒对象属性时,将完全加载这个对象的所有懒对象属性.false,当延迟加载时,按需加载对象属性(即访问对象中一个对象属性时,不会加载对象中的引用属性).默认为true. 修改延

  • Android开发之Fragment懒加载的几种方式及性能对比

    目录 1. Support时代的懒加载 2. AndrodX时代的懒加载 3. ViewPager2时代的懒加载 4. ViewPage和ViewPager2的性能对比 Android开发中ViewPager+Fragment的懒加载 TabLayout+ViewPager+Fragment是我们开发常用的组合.ViewPager的默认机制就是把全部的Fragment都加载出来,而为了保障一些用户体验,我们使用懒加载的Fragment,就是让我们再用户可见这个Fragment之后才处理业务逻辑.

  • SpringBoot2 JPA解决懒加载异常的问题

    jpa解决懒加载异常 在我上一遍文章上进行行修改,SpringBoot2 实现JPA分页和排序分页 实体类上改: @Entity @Table(name = "employee") @JsonIgnoreProperties(value={"hibernateLazyInitializer", "department"}) public class Employee { @Id @GeneratedValue(strategy = Generat

  • SpringBoot预加载与懒加载实现方法超详细讲解

    目录 预加载 getMergedLocalBeanDefinition 循环创建bean 懒加载 @Lazy 全局懒加载 为什么需要全局懒加载 全局懒加载的好处与问题 预加载 bean在springBoot启动过程中就完成创建加载 在AbstractApplicationContext的refresh方法中 // Instantiate all remaining (non-lazy-init) singletons. beanFactory.preInstantiateSingletons()

随机推荐