摘要:我们今天聊一下里的三个方法,分别是,以及。我当初也是这么想的,后来在写作业的过程中出错了,真相只有一个。最后使用,也能准确的查到结果,有趣的是打印了三条查询语句。注文中使用的版本为。
我们今天聊一下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对象,可以实现动态查询;
而Optional代表一个可能存在也可能不存在的值。
注:文中使用的版本为Spring Data JPA 2.1.8.RELEASE。
文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。
转载请注明本文地址:https://www.ucloud.cn/yun/77881.html
摘要:还定义了一个运行时,用于处理对象的查询和管理事务。是持久化规范中的一个最新版本。旨在统一,,,从目前来看,的确取得了成功。目前大多数持久化供应商已经发布了的实现,并被行业和用户采用。这些包括由和收购,由收购和由和收购。需注意为时为第一页。 什么是jpaJPA (The Java Persistence API)是用于访问,持久化和管理 Java 对象/类与关系型数据库之间的数据交互的 ...
摘要:操作操作对象设置缓存时间有效时间等待等待设置为的时候后面可能取到值,的过期时间有延迟注意操作对象时对象需要实现序列化接口两者操作互不影响生成为生称为数据库文件相关相关相关相关相关相关相关相关相关相关相关相关 springboot_database springboot1.5.7集成mybatis、jpa、redis、mongodb,对不同数据库进行操作的实例项目代码获取:https:/...
摘要:关联关系的关联关系定义上,感觉并不是很灵活,姿势也比较难找。如,定义在关联关系上的参数可以设置级联的相关东西。因为序列化会涉及到实体类关联对象的获取,会触发所有的关联关系。 接(4) - Database 系列. Java Persistence API,可以理解就是 Java 一个持久化标准或规范,Spring Data JPA 是对它的实现。并且提供多个 JPA 厂商适配,如 Hi...
摘要:所以悲观锁是限制其他线程,而乐观锁是限制自己,虽然他的名字有锁,但是实际上不算上锁,只是在最后操作的时候再判断具体怎么操作。悲观锁和乐观锁比较悲观锁适合写多读少的场景。 最近在公司的业务上遇到了并发的问题,并且还是很常见的并发问题,算是低级的失误了。由于公司业务相对比较复杂且不适合公开,在此用一个很常见的业务来还原一下场景,同时介绍悲观锁和乐观锁是如何解决这类并发问题的。 公司业务就是...
阅读 938·2023-04-25 23:50
阅读 1912·2021-11-19 09:40
阅读 539·2019-08-30 13:50
阅读 2694·2019-08-29 17:11
阅读 1020·2019-08-29 16:37
阅读 2964·2019-08-29 12:54
阅读 2776·2019-08-28 18:17
阅读 2608·2019-08-26 16:55