JPA的entityManager的find方法与getReference方法的区别
场景
jpa入门简介与搭建helloworld(附代码下载):
https://blog.csdn.net/badao_liumang_qizhi/article/details/103473937
注:
博客主页:
关注公众号
霸道的程序猿
获取编程相关电子书、教程推送与免费下载。
实现
find
返回指定的 oid 对应的实体类对象,如果这个实体存在于当前的持久化环境,则返回一个被缓存的对象;否则会创建一个新的 entity, 并加载数据库中相关信息;若 oid 不存在于数据库中,则返回一个 null。第一个参数为被查询的实体类类型,第二个参数为待查找实体的主键值。
getreference
与find()方法类似,不同的是:如果缓存中不存在指定的 entity, entitymanager 会创建一个 entity 类的代理,但是不会立即加载数据库中的信息,只有第一次真正使用此 entity 的属性才加载,所以如果此 oid 在数据库不存在,getreference() 不会返回 null 值, 而是抛出entitynotfoundexception
单元测试
测试find方法
@test public void testfind() { customer customer = entitymanager.find(customer.class, 3); system.out.println("-------------------------------------"); system.out.println(customer); }
测试结果
测试getreference方法
@test public void testgetreference(){ customer customer = entitymanager.getreference(customer.class, 3); system.out.println(customer.getclass().getname()); system.out.println("-------------------------------------"); system.out.println(customer); }
通过上面的测试可知
find方法类似于hibernate中session的get方法。
getreference方法类似于hibernate的session的load方法。
find()做了一次select的操作,而getreference并没有做有关数据库的操作,而是返回一个代理,这样它就减少了连接数据库和从数据库加载持久状态的开销。
上一篇: 21.跨域和CORS
下一篇: Java连载59-局部内部类、匿名内部类
推荐阅读
-
树蜜与蜂蜜的区别,给你介绍鉴别蜂蜜的方法
-
Python实例方法、类方法、静态方法的区别与作用详解
-
jquery append()方法教程与html()方法教程的区别及使用介绍
-
apply、bind、call方法的作用与区别
-
解析thinkphp中的M()与D()方法的区别
-
Android中ProgressDialog的dismiss()与cancel()方法的区别
-
Java中成员变量与局部变量的区别、对象类型作为方法的参数和方法的返回值
-
Python中append、extend与insert几个方法的区别
-
HTTP请求 GET与POST方法的区别
-
JS forEach和map方法的用法与区别分析