问答文章1 问答文章501 问答文章1001 问答文章1501 问答文章2001 问答文章2501 问答文章3001 问答文章3501 问答文章4001 问答文章4501 问答文章5001 问答文章5501 问答文章6001 问答文章6501 问答文章7001 问答文章7501 问答文章8001 问答文章8501 问答文章9001 问答文章9501

hibernate的get()方法的使用32

发布网友 发布时间:2023-10-14 00:10

我来回答

4个回答

热心网友 时间:2024-11-26 21:28

首先你必须已经正确实现了持久化类User(假定名)和映射文件。。。
get方法是session类的静态方法,有三个重载版本,最常用的还是
public Object get(Class clazz,Serializable id),get方法并不是用来查询的,它一般被用来加载某个持久化对象。如果进行功能强大的查询,还是用HQL吧
get的使用很简单,以楼主的情况为例。假设你的User表中有一条记录,主键值为“username”那么用下面语句即可获得这条记录对应的持久化对象:
User user=new User();
user=(User)session.get(User.class,"username");

唯一要注意的是参数id指的User类的持久化标识符,在映射文件中一般是和数据库表主键相对应的,所以实际情况下也就是字段的主键值。

热心网友 时间:2024-11-26 21:28

1.从返回结果上对比:
load方式检索不到的话会抛出org.hibernate.ObjectNotFoundException异常
get方法检索不到的话会返回null

2.从检索执行机制上对比: get方法和find方法都是直接从数据库中检索 而load方法的执行则比较复杂首先查找session的persistent Context中是否有缓存,如果有则直接返回 如果没有则判断是否是lazy,如果不是直接访问数据库检索,查到记录返回,查不到抛出异常 如果是lazy则需要建立代理对象,对象的initialized属性为false,target属性为null 在访问获得的代理对象的属性时,检索数据库,如果找到记录则把该记录的对象复制到代理对象的target上,并将initialized=true,如果找不到就抛出异常。

3.根本区别说明
如果你使用load方法,hibernate认为该id对应的对象(数据库记录)在数据库中是一定存在的,所以它可以放心的使用,它可以放心的使用代理来 延迟加载该对象。在用到对象中的其他属性数据时才查询数据库,但是万一数据库中不存在该记录,那没办法,只能抛异常。所说的load方法抛异常是指在使用 该对象的数据时,数据库中不存在该数据时抛异常,而不是在创建这个对象时(注意:这就是由于“延迟加载”在作怪)。

由于session中的缓存对于hibernate来说是个相当廉价的资源,所以在load时会先查一下session缓存看看该id对应的对象是否存在,不存在则创建代理。所以如果你知道该id在数据库中一定有对应记录存在就可以使用load方法来实现延迟加载。

对于get方法,hibernate会确认一下该id对应的数据是否存在,首先在session缓存中查找,然后在二级缓存中查找,还没有就查数据库,数据库中没有就返回null。

对于load和get方法返回类型:虽然好多书中都这么说:“get()永远只返回实体类”,但实际上这是不正确的,get方法如果在 session缓存中找到了该id对应的对象,如果刚好该对象前面是被代理过的,如被load方法使用过,或者被其他关联对象延迟加载过,那么返回的还是 原先的代理对象,而不是实体类对象,如果该代理对象还没有加载实体数据(就是id以外的其他属性数据),那么它会查询二级缓存或者数据库来加载数据,但是 返回的还是代理对象,只不过已经加载了实体数据。

get方法首先查询session缓存,没有的话查询二级缓存,最后查询数据库;反而load方法创建时首先查询session缓存,没有就创建代理,实际使用数据时才查询二级缓存和数据库。

4.简单总结

总之对于get和load的根本区别,一句话,hibernate对于load方法认为该数据在数据库中一定存在,可以放心的使用代理来延迟加载,如果在使用过程中发现了问题,只能抛异常;而对于get方法,hibernate一定要获取到真实的数据,否则返回null。

热心网友 时间:2024-11-26 21:29

session.get( id ),返回是一个object的对象,

你强制装换一下就好了
session你应该能获取到吧,

get方法里的参数可以是任何一个 实现了 java.io.序列化接口.
而 不管 是String Ingeter等都实现了此接口,
所以可以传任何类型的主键 对象过来

不知道讲的对不对,我也刚学

热心网友 时间:2024-11-26 21:29

用HQL去做。

get(id)
id是你表中主键(即:primary)
声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com
whirlpool如何制热 如何查被录取到的专业 怎样查被录取的专业 录取后怎样查询录取的专业 录取专业怎么查 已被录取怎么查专业 ghs网络语什么意思_ghs网络语意思出处含义介绍 纸箱企业管理软件 ghs什么意思网络(ghs什么意思网络用语) 《喜羊羊与灰太狼》大结局 华为荣耀6跑分多少85 剪力墙钢模板怎么施工? 男30岁剪什么样发型好看 30岁男人留什么发型 30岁男人发型大全 做中药材生意要办理什么手续?28 苹果5s序列号F17开头是不是翻新机25 柑橘果实上的白色疙瘩是什么病害,怎样防治 龙眼有哪些贮藏期病害? 杜鹃花在哪个地方种最多2 箫和笛子哪个好学?354 我想在家养鸡大概要多少钱聊城? 做完人流后可以喝酸奶吗5 早餐吃什么食物最容易消化呢?谢谢了,大神帮忙啊6 求《回到明朝当王爷》精校版全文TXT,要无错字、无乱码、无漏...1 请问吃水果好吗?谢谢了,大神帮忙啊 夏季发烧感冒该吃些什么水果,或喝些什么饮料?(挑重要的说,别... 4字成语大全1000个18079 求杰哥的类似于这种的图片,越多越好,谢谢! 如何重新注册一个 蓝牙怎么会自动关闭了? hibernate的特点是什么,用hibernate有什么好...40 餐厅下水道油泥如何清理5 饭店下水道油污堵了怎么办15 自己想做中药材的生意,该从哪些方面开始准备18 对于一名想做药材生意的人来说,药材生意应该从何处做起???75 跪求 锦衣为王 txt 无错字版本 谢谢!2 新速腾左侧前车门异响怎么解决 养鸡需要投资多少钱69 孩子瞌睡多是怎么回事37 哪里野杜鹃花比较多,俗名也叫映山红,可以人工挖采的地方?10 得了一种病,还不知道是什么病。七岁就有,主要是想睡觉了,一想... 圣王全本txt精校版 无错字无乱码21 为什么要使用hibernate18 如何清除饭店厨房下水管油污 国外有哪些类似微信的软件?2 知达常青藤中学校分数线5 一个手机怎么登录两个呢! 请教高手,捷信现金贷款好批吗 什么时间吃水果最好?谢谢了,大神帮忙啊 职业培训班都学哪些内容1