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

JPA中遇到一些异常的分析与解决的更多相关文章

  1. 关于Client_Abort_Exception异常的分析和解决

    1.什么情况下会出现“ClientAbortException:  java.net.socketException:  Broken pipe”? 答:客户端非正常(标准握手协议)退出连接,体现在h ...

  2. SKSpriteNode对象初始化在iPhone 6 plus中显示不正确的分析及解决

    一个SpriteKit项目在其他设备上运行都无问题(无论是真机或是模拟器),但是在iPhone6 Plus上会出现精灵对象纹理被过度放大的现象: 从上图中大家可以看到无论是主角或是道具球都过大了. 看 ...

  3. C#中异常:“The type initializer to throw an exception(类型初始值设定项引发异常)”的简单分析与解决方法

    对于C#中异常:“The type initializer to throw an exception(类型初始值设定项引发异常)”的简单分析,目前本人分析两种情况,如下: 情况一: 借鉴麒麟.NET ...

  4. Jpa中设置OneToMany插入报异常解决办法

    在Jpa中如果设置@OneToMany,但使用的时候,如果没有赋值,会报异常出现,这时只需要实例化一个空数组即可, 但类型一定要对应: 实例如下: newField.setxxxxxList(new ...

  5. C++ 中的异常机制分析

    C++异常机制概述 异常处理是C++的一项语言机制,用于在程序中处理异常事件.异常事件在C++中表示为异常对象.异常事件发生时,程序使用throw关键字抛出异常表达式,抛出点称为异常出现点,由操作系统 ...

  6. PHP中错误与异常的日志记录用法分析

    原文:http://www.jb51.net/article/89548.htm ----------------------------------------------------------- ...

  7. alias导致virtualenv异常的分析和解法

    title: alias导致virtualenv异常的分析和解法 toc: true comments: true date: 2016-06-27 23:40:56 tags: [OS X, ZSH ...

  8. Android中处理崩溃异常

    转自:http://my.eoe.cn/817027/archive/17997.html 大家都知道,现在安装Android系统的手机版本和设备千差万别,在模拟器上运行良好的程序安装到某款手机上说不 ...

  9. Android中处理崩溃异常和记录日志

    大家都知道,现在安装Android系统的手机版本和设备千差万别,在模拟器上运行良好的程序安装到某款手机上说不定就出现崩溃的现象,开发者个人不可能购买所有设备逐个调试,所以在程序发布出去之后,如果出现了 ...

随机推荐

  1. 07.interrupt

    /** *isInterrupted */ public class InterruptDemo { public static void main(String[] args) throws Int ...

  2. 2.第一个Codefirst实例

    1.什么是codefirst EF4.1中开始支持Code First .这种方式在领域设计模式中非常有用.使用Code First模式,你可以专注于领域设计,根据需要,为你一个领域的对象创建类集合, ...

  3. Quartz.Net 任务调度之日志(5)

    Quartz.框架的监听器和日志 1.JobListener  任务日志 新建一个类,继承IJobListener public class CustomJobListener : IJobListe ...

  4. 每天一个linux命令:cat(10)

    cat cat命令的用途是连接文件或标准输入并打印.这个命令常用来显示文件内容,或者将几个文件连接起来显示,或者从标准输入读取内容并显示,它常与重定向符号配合使用 注意:当文件较大时,文本在屏幕上迅速 ...

  5. 【持久层】Druid简介

    Druid首先是一个数据库连接池.Druid是目前最好的数据库连接池,在功能.性能.扩展性方面,都超过其他数据库连接池,包括DBCP.C3P0.BoneCP.Proxool.JBoss DataSou ...

  6. 一条SQL在 MaxCompute 分布式系统中的旅程

    摘要:2019杭州云栖大会大数据技术专场,由阿里云资深技术专家侯震宇.阿里云高级技术专家陈颖达以及阿里云资深技术专家戴谢宁共同以“SQL在 MaxCompute 分布式系统中的旅程 ”为题进行了演讲. ...

  7. Hibernate 单项多对1

    自己理解: 单向1对多. 一个客户可以发出多个订单.但是一个订单只属于一个客户. 写对象的时候.在多的那个类对象把1的作为自己的一个属性. 写配置文件 <many-to-one name=1的属 ...

  8. 04-树5 Root of AVL Tree(25 分)

    An AVL tree is a self-balancing binary search tree. In an AVL tree, the heights of the two child sub ...

  9. 饿了么 <el-input></el-input>输入框获取与失去焦点事件

    //1.定义focus事,绑定属性 <el-input v-model="headerInput" @focus="onInputFocus" @blur ...

  10. js调用ios和安卓方法

    安卓: window.AndroidWebView.方法名(参数); window.AndroidWebView.productDetail(1989); ios: function isbrowse ...