zoukankan      html  css  js  c++  java
  • JPA 懒加载实践 fetch = FetchType.LAZY

    项目里用到JPA关系映射,导致一个普通的查询方法会执行数十条sql,使用懒加载的方式解决。当时配置过懒加载之后,还是失效 会执行sql 于是反复试验 排查得出一些结论。

     

     

     第一次我的代码是这样的,感觉应该没有问题。但是每次执行到打断点这一行,会执行关联查询的sql。

    坑!坑!坑!这里有坑请注意  最后排查发现是因为我的实体类用了lombok的@Data注解导致的。单独使用@Getter 和 @Setter方法就可以了。

    我还测试了第二种方法,直接返回实体类对象,但是才开始会报一个cast错误 Caused by: com.fasterxml.jackson.databind.exc.InvalidDefinitionException: 错误 大意就是 数据类型转换失败,懒加载的字段查出来并不为null而是一个叫hibernateLazyInitializer的东西  于是百度到@JsonIgnoreProperties(value = { "hibernateLazyInitializer"})  这样的写法  虽然不报错了  但是return 的时候还是会去执行sql,只有把这个字段@JsonIgnore才正常

    注意 不加@JsonIgnore就必须加@JsonIgnoreProperties(value = { "hibernateLazyInitializer"}) 否则JPA直接输出就会报错

    1. 所以总结出两种用法,第一种就是查出来之后 利用VO封装,但是注意实体类不能用lombok的@Data及以上的注解。

    2. 直接返回实体类,但是需要把lazy字段 忽略掉 才可以,如果其他时候要用到 需要继续封装VO赋值才可以。

     

    仅作为个人经验总结,欢迎指教。

  • 相关阅读:
    luogu P1833 樱花 看成混合背包
    luogu P1077 摆花 基础记数dp
    luogu P1095 守望者的逃离 经典dp
    Even Subset Sum Problem CodeForces
    Maximum White Subtree CodeForces
    Sleeping Schedule CodeForces
    Bombs CodeForces
    病毒侵袭持续中 HDU
    病毒侵袭 HDU
    Educational Codeforces Round 35 (Rated for Div. 2)
  • 原文地址:https://www.cnblogs.com/wgb123/p/13371680.html
Copyright © 2011-2022 走看看