栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 面试经验 > 面试问答

休眠:session.get和session.load之间的区别

面试问答 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

休眠:session.get和session.load之间的区别

在Hibernate论坛中:

摘自《hibernate中的行动》一书。好人读过这个..


通过标识符检索对象以下Hibernate代码段从数据库检索User对象:

User user = (User) session.get(User.class, userID);

get()方法很特殊,因为标识符唯一地标识一个类的单个实例。因此,应用程序通常使用标识符作为持久对象的便捷句柄。按标识符检索可以在检索对象时使用高速缓存,从而避免在对象已被高速缓存的情况下数据库命中。Hibernate还提供了load()方法:

User user = (User) session.load(User.class, userID);

load()方法较旧;由于用户请求,get()已添加到Hibernate的API中。区别不大:

如果load()在缓存或数据库中找不到对象,则会引发异常。load()方法从不返回null。如果找不到对象,则get()方法返回null。

load()方法可以返回代理而不是实际的持久实例。代理是一个占位符,它在首次访问实物时触发加载。另一方面,get()从不返回代理。在get()和load()之间进行选择很容易:如果确定持久对象存在,并且不存在将被认为是例外,则load()是一个不错的选择。如果不确定是否存在具有给定标识符的持久实例,请使用get()并测试返回值以查看其是否为null。使用load()有进一步的含义:应用程序可以检索对持久实例的有效引用(代理),而无需访问数据库来检索其持久状态。因此,当load()在缓存或数据库中找不到持久对象时,它可能不会引发异常。访问代理后,将在以后引发该异常。当然,通过标识符检索对象并不像使用任意查询那样灵活。



转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/426527.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号