关于Hibernate的session的load方法

session的load方法,Usersuser=(Users)session.load(Users.class,userId);load支持延迟加载,get不支持延迟加... session的load方法,Users user = (Users)session.load(Users.class, userId);
load支持延迟加载,get不支持延迟加载。延迟加载就是只有在访问延迟加载对象的具体属性(getClass,getId除外)时才会去与数据库交互。在执行load语句时并没有与数据库交互,而是返回一个代理对象。
既然getId除外,那么代理对象的userId是怎么来的?从数据库中查询而来的?还是自动生成的?
展开
 我来答
帐号已注销
2012-03-20 · TA获得超过335个赞
知道小有建树答主
回答量:427
采纳率:0%
帮助的人:363万
展开全部
调用session.load()方法时候,首先到Session中找,找不到直接创建代理。除非真正用到数据的时候
load方法才会进行数据库的调用,那么这个时候,如果数据库没有对应的id那么方法就会跑出异常。
如果说内存中已经存在所有的 对象,那么不管是load放啊还是get方法,它们都会返回内存中的形态 。
hutiefang
2012-03-20 · TA获得超过417个赞
知道小有建树答主
回答量:320
采纳率:100%
帮助的人:182万
展开全部
代理对象就是 查询部分数据 等需要详细的数据的时候在查询 举个例子 比如select * from 表
代理对象就是只查出对应的id 然后你需要某一个属性的时候再查 select id from 表 然后你需要取di=5的时候在发送 select * from 表id=5.你把sql语句打开啊 这样每次用hibenate的时候都知道是怎么回事
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
jimmyc2006
推荐于2018-04-05 · TA获得超过1153个赞
知道小有建树答主
回答量:572
采纳率:100%
帮助的人:653万
展开全部
Users user = (Users)session.load(Users.class, userId);
这里你传入了userId,既然没有发出sql,我觉得应该从这里获得的。
追问
我听说会返回代理对象的OID,但是这个代理对象的OID是不是就是这个load方法里的userId呢?
追答
应该是,要不没其他地方可以获得。将userId设置为表里面根本不存在的id,getId还是能返回这个值,而且又没有发sql。说明这时候只是建立一个代理,还跟数据库没有任何交互。
本回答被提问者和网友采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
明月清风618
2012-03-20 · TA获得超过737个赞
知道小有建树答主
回答量:395
采纳率:100%
帮助的人:128万
展开全部
肯定是从数据库里面查询的啊。你又没有用save()或update(),不会自动生成的。你查询的userid是数据库里保存的已经 存在的对象的id。谢谢。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
百度网友8927dbe5b
2012-03-20 · TA获得超过448个赞
知道小有建树答主
回答量:1011
采纳率:100%
帮助的人:289万
展开全部
从数据库中查询而来的
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(3)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式