摘要:我們今天聊一下里的三個方法,分別是,以及。我當初也是這么想的,后來在寫作業的過程中出錯了,真相只有一個。最后使用,也能準確的查到結果,有趣的是打印了三條查詢語句。注文中使用的版本為。
我們今天聊一下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。
文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。
轉載請注明本文地址:http://specialneedsforspecialkids.com/yun/77881.html
摘要:還定義了一個運行時,用于處理對象的查詢和管理事務。是持久化規范中的一個最新版本。旨在統一,,,從目前來看,的確取得了成功。目前大多數持久化供應商已經發布了的實現,并被行業和用戶采用。這些包括由和收購,由收購和由和收購。需注意為時為第一頁。 什么是jpaJPA (The Java Persistence API)是用于訪問,持久化和管理 Java 對象/類與關系型數據庫之間的數據交互的 ...
摘要:操作操作對象設置緩存時間有效時間等待等待設置為的時候后面可能取到值,的過期時間有延遲注意操作對象時對象需要實現序列化接口兩者操作互不影響生成為生稱為數據庫文件相關相關相關相關相關相關相關相關相關相關相關相關 springboot_database springboot1.5.7集成mybatis、jpa、redis、mongodb,對不同數據庫進行操作的實例項目代碼獲?。篽ttps:/...
摘要:關聯關系的關聯關系定義上,感覺并不是很靈活,姿勢也比較難找。如,定義在關聯關系上的參數可以設置級聯的相關東西。因為序列化會涉及到實體類關聯對象的獲取,會觸發所有的關聯關系。 接(4) - Database 系列. Java Persistence API,可以理解就是 Java 一個持久化標準或規范,Spring Data JPA 是對它的實現。并且提供多個 JPA 廠商適配,如 Hi...
摘要:所以悲觀鎖是限制其他線程,而樂觀鎖是限制自己,雖然他的名字有鎖,但是實際上不算上鎖,只是在最后操作的時候再判斷具體怎么操作。悲觀鎖和樂觀鎖比較悲觀鎖適合寫多讀少的場景。 最近在公司的業務上遇到了并發的問題,并且還是很常見的并發問題,算是低級的失誤了。由于公司業務相對比較復雜且不適合公開,在此用一個很常見的業務來還原一下場景,同時介紹悲觀鎖和樂觀鎖是如何解決這類并發問題的。 公司業務就是...
閱讀 955·2023-04-25 23:50
閱讀 1953·2021-11-19 09:40
閱讀 598·2019-08-30 13:50
閱讀 2726·2019-08-29 17:11
閱讀 1040·2019-08-29 16:37
閱讀 2985·2019-08-29 12:54
閱讀 2792·2019-08-28 18:17
閱讀 2636·2019-08-26 16:55