内容简介:我们今天聊一下咋一看三个方法都能返回一个结果集,用哪个好像都没问题。我当初也是这么想的,后来在写作业的过程中出错了,真相只有一个。我的例子是查询一个一对一映射关系的实体,极为简单,我就不上代码了;用
我们今天聊一下 Spring Data JPA 里的三个方法,分别是 getOne , findOne 以及 findById 。
咋一看三个方法都能返回一个结果集,用哪个好像都没问题。我当初也是这么想的,后来在写作业的过程中出错了,真相只有一个。
我的例子是查询一个一对一映射关系的实体,极为简单,我就不上代码了;用 findById 则可以实现我们的需求,而使用 getOne 查询后对结果集进行打印,出现下面的异常。
org.hibernate.LazyInitializationException: could not initialize proxy - no Session
这个异常好像跟使用哪个方法没太大的关系,因为他是在得到查询的结果集后,打印这个结果集的时候出现的,且映射关系默认使用 FetchType.EAGER ,实体的 toString 方法仅对实体自己的属性做打印,不处理映射关系,莫非是因为得到的一个代理对象,不能映射成实体?还希望路过的高人指点一二。
最后使用 findOne ,也能准确的查到结果,有趣的是打印了三条查询语句。
翻开官方的 API ,找找这几个磨人的方法都在哪:
-
getOne来自JpaReposiroty接口,对于传入的标识则返回一个实体的引用;且取决于该方法的实现,可能会出现EntityNotFoundException,并会拒绝一些无效的标识;
-
findById来自CrudRepository接口,通过它的id返回一个实体;
-
findOne来自QueryByExampleExecutor接口,返回一个通过Example匹配的实体或者null;
那他们的区别也就是:
-
getOne返回一个实体的引用,无结果会抛出异常; -
findById返回一个Optional对象; -
findOne返回一个Optional对象,可以实现动态查询;
注:文中使用的版本为 Spring Data JPA 2.1.8.RELEASE 。
以上就是本文的全部内容,希望本文的内容对大家的学习或者工作能带来一定的帮助,也希望大家多多支持 码农网
猜你喜欢:本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们。
jQuery实战(第2版)
[美]Bear Bibeault、[美]Yehuda Katz / 三生石上 / 人民邮电出版社 / 2012-3 / 69.00元
jQuery 是目前最受欢迎的JavaScript/Ajax 库之一,能用最少的代码实现最多的功能。本书全面介绍jQuery 知识,展示如何遍历HTML 文档、处理事件、执行动画、给网页添加Ajax 以及jQuery UI 。书中紧紧地围绕“用实际的示例来解释每一个新概念”这一宗旨,生动描述了jQuery 如何与其他工具和框架交互以及如何生成jQuery 插件。 本书适合各层次Web 开发人......一起来看看 《jQuery实战(第2版)》 这本书的介绍吧!