日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > java >内容正文

java

Java文档阅读笔记-JPA中getOne()和findById的区别

發布時間:2025/3/15 java 29 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Java文档阅读笔记-JPA中getOne()和findById的区别 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

findById()和getOne()都是從數據庫中檢索某個對象,不過獲取數據的方式是不同的,getOne()是lazy操作,這種操作甚至沒有訪問數據庫。

?

getOne()

返回ID的引用對象,他內部調用的了EntityManager.getReference()方法,這個方法返回proxy而非直接訪問數據庫(所以叫lazy),如果請求的實體不存在數據庫中,那么此方法拋出EntityNotFoundException。

?

findById()

此方法直接訪問數據庫返回真實的對象,如果這條記錄在數據庫中不存在,則返回null。

?

何時使用getOne()何時使用findById()

getOne()避免了數據庫和JVM的訪問,直到返回的proxy的屬性是真實的數據庫訪問。才會去訪問數據庫。

設計如下場景來說明這2個調用的區別:

Department

@Entity @Table(name = "t_departments") public class Department {@Id@GeneratedValue(strategy= GenerationType.AUTO)private Long id;private String name;

Employee

@Entity @Table(name = "t_employees") public class Employee {@Id@GeneratedValue(strategy= GenerationType.AUTO)private Long id;private String name;@ManyToOne private Department department;

Employee的department屬性和Department類有關。

如下代碼:

@Service @Transactional(propagation = Propagation.REQUIRES_NEW) public class HRService {@Autowiredprivate DepartmentRepository departmentRepository;@Autowiredprivate EmployeeRepository employeeRepository;public Department createDepartment() {Department dept = new Department();dept.setName("Product & Engg");return departmentRepository.save(dept);}public void createEmployee1(long deptId) {final Department pne = departmentRepository.getOne(deptId); Employee employee = new Employee();employee.setName("Foo 1");employee.setDepartment(pne);employeeRepository.save(employee);}

使用getOne()比findById()要好,因為這里面的場景并不需要獲取department的對象

生成的SQL如下:

insert into t_employees (department_id, name, id) values (?, ?, ?)

當使用findById()代替getOne()如下代碼:

public void createEmployee2(long deptId) {Optional<Department> pne = departmentRepository.findById(deptId);Employee employee = new Employee();employee.setName("Foo 1");pne.ifPresent(department -> {employee.setDepartment(department);});employeeRepository.save(employee);}

生成的SQL如下:

select department0_.id as id1_4_0_, department0_.name as name2_4_0_ from t_departments department0_ where department0_.id=? insert into t_employees (department_id, name, id) values (?, ?, ?)

總結:

getOne()findById()
lazily loaded目標實體直接通過ID獲取數據庫中的實體
只獲取對象需要用的屬性快速加載對象的所有屬性
如果對象不存在拋出EntityNotEoundException對象不存在就返回null
更好的性能傳統數據庫訪問方式

總結

以上是生活随笔為你收集整理的Java文档阅读笔记-JPA中getOne()和findById的区别的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。

主站蜘蛛池模板: 无套内谢少妇露脸 | 国产精品日日摸天天碰 | 91成人在线免费观看 | 手机av免费 | 中国毛片在线观看 | 女仆裸体打屁屁羞羞免费 | 强辱丰满人妻hd中文字幕 | 国产精品美女高潮无套 | 在线观看国产一级片 | www.四虎在线观看 | 女教师高潮黄又色视频 | 超碰97免费在线 | 天堂在线视频观看 | 欧美九九视频 | 精品视频久久久 | 极品三级| 精品999久久久 | 色乱码一区二区三区在线男奴 | 超碰在线免费公开 | 亚洲成人偷拍 | 久久精品黄色 | www九九九| 久久免费看少妇高潮 | 影音先锋男人资源网站 | 91国自产精品中文字幕亚洲 | 国产美女极度色诱视频www | 国产 欧美 日韩 在线 | 波多野吉衣一二三区乱码 | 韩日中文字幕 | 超碰999| а中文在线天堂 | 国产精品午夜未成人免费观看 | 亚洲另类色综合网站 | 一曲二曲三曲在线观看中文字幕动漫 | 久久久成人免费视频 | www五月 | 日韩欧美一区二区三区久久婷婷 | 日韩精品一区二区三区视频在线观看 | 69xxx免费视频 | 亚洲欧美日韩国产一区二区三区 | 日韩va在线 | 国产成人无码精品久久久电影 | 天天射天天色天天干 | 永久毛片 | 日本作爱视频 | 男女超爽视频免费播放 | 精品国产视频在线 | 一本色道久久综合亚洲二区三区 | www.在线观看视频 | www.国产精品.com | 伊人婷婷在线 | 裸体裸乳被免费看视频 | 成人夜晚看av| 美女穴穴| 最新中文在线视频 | 日韩av片在线看 | 九九热这里有精品 | 免费观看nba乐趣影院 | 色屁屁影院www国产高清麻豆 | 日韩欧美在线观看一区二区 | 女人喂男人奶水做爰视频 | 美女毛片网站 | 黄色大片在线免费观看 | 欧美日韩成人在线观看 | 京香julia在线观看 | 国精产品一二三区精华液 | 97国产成人无码精品久久久 | 久久加久久 | 亚洲av永久无码国产精品久久 | 欧美激情一级精品国产 | 最新在线观看av | 91新视频 | 小黄网站在线观看 | 男生插女生视频在线观看 | 欧美一区二区激情 | 国产一区二区三区在线视频 | 亚洲69| 免费毛片一区二区三区久久久 | 性一交一乱一乱一视频 | 99ri视频 | 日本在线视频一区二区三区 | 久久久少妇 | 麻豆视频免费在线观看 | 善良的女朋友在线观看 | 欧美三级一级片 | 亚洲xxx视频 | 精品国产伦一区二区三区 | 欧美成人aaa片一区国产精品 | 99国产精品一区二区 | 国产精品一区二区三区四区五区 | 日本人和亚洲人zjzjhd | 麻豆changesxxx国产 | 超碰超碰在线 | 深夜福利91 | 日韩欧美高清在线 | 日韩1024| 中文字幕一区二区三区手机版 | 久久精品国产清自在天天线 | a级在线免费观看 |