JPA中遇到一些异常的分析与解决

Spring Data JPA踩坑到填坑:1

JPA多对多关

//做者表测试

//书籍表fetch

Book和Author是多对多关系优化

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

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

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

  • 而这个页面的信息告诉咱们,hibernate是急性加载的,一次性家读取全部的数据,而后再被使用blog

可能引起的问题

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

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

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

  • 应对方法:

    • 懒加载环境:手动给事务,尽可能在事务包裹的时候将数据所有取出来;

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

  • ToString()方法引起栈移除

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

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

  • 应对方法:

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

1

相关文章
相关标签/搜索