zoukankan      html  css  js  c++  java
  • JPA中遇到一些异常的分析与解决

    Spring Data JPA踩坑到填坑:1

    JPA多对多关

    //作者表

    //书籍表

    Book和Author是多对多关系

    先放两张图做个说明:Jpa底层依赖于hibernate,hibernate默认是有懒加载机制优化的

    • 可以发现:默认是开启了懒加载的,当我们要是要到该有的查询结果的时候,JPA才会去给我们查询

    • 通过在@ManyToMany注解中配置属性:fetch = FetchType.EAGER

    • 而这个页面的信息告诉我们,hibernate是急性加载的,一次性家读取所有的数据,然后再被使用

    可能引发的问题

    • failed to lazily initialize a collection of role,could not initialize proxy - no Session

    • 这个问题主要来源于我测试的时候发现的,没有添加任何事务,JPA查询数据后,自动关闭了会话

    • 懒加载我也手动关闭,所以当我想要使用数据的时候,会话其实已经关闭了,导致懒加载查询数据失败

    • 应对方法:

      • 懒加载环境:手动给事务,尽量在事务包裹的时候将数据全部取出来;

      • 懒加载关闭:一次性读取全部数据,无需理会

    • ToString()方法引发栈移除

    • 当我们对对多的时候,想打印一个检索结果,这个时候如果我们通过使用lombok的@ToString注解,或者自动生成ToString方法,都会造成栈内存溢出

    • A对象中有一个List<B> ,而B对象中也有一个List<A>,如果你不切断一个其中ToString关于集合的打印,这就是一个无线轮回的过程,就会造成栈移除

    • 应对方法:

      • 看你需要那一边的数据为主,如果是A对象的数据为主,就把B对象的ToString中关于属性List<A>属性的打印给干掉,即可房子无线循环问题

    1

  • 相关阅读:
    使用SELECT语句检索数据
    redis的安装和使用【2】redis的java操作
    Python之数据结构改造
    InnoDB undo log物理结构的初始化
    Redis-RDB持久化设置
    MySql(四)Select条件查询
    Node.js TLS/SSL
    Node.js 定时器
    Node.js 系统
    Node.js 字符串解码器
  • 原文地址:https://www.cnblogs.com/msi-chen/p/11674964.html
Copyright © 2011-2022 走看看