当前位置:七道奇文章资讯编程技术Java编程
日期:2011-03-22 16:12:00  来源:本站整理

<b>Hibernate:update和saveOrUpdate详解</b>[Java编程]

赞助商链接



  本文“<b>Hibernate:update和saveOrUpdate详解</b>[Java编程]”是由七道奇为您精心收集,来源于网络转载,文章版权归文章作者所有,本站不对其观点以及内容做任何评价,请读者自行判断,以下是其具体内容:

先来点概念:

在Hibernate中,最核心的概念就是对PO的状况管理.一个PO有三种状况:

1、未被长期化的VO

此时就是一个内存对象VO,由JVM管理生命周期

2、已被长期化的PO,并且在Session生命周期内

此时映射数据库数据,由数据库管理生命周期

3、曾被长期化过,但目前和Session已经detached了,以VO的身份在运行

这种和Session已经detached的PO还可以进入另一个Session,持续举行PO状况管理,此时它就成为PO的第二种状况了.这种PO实际上是跨了Session举行了状况保护的.

在传统的JDO1.x中,PO只有前面两种状况,一个PO一旦脱离PM,就丧失了状况了,不再和数据库数据关联,成为一个纯粹的内存VO,它即便进入一个新的PM,也不能恢复它的状况了.

Hibernate强的地方就在于,一个PO脱离Session之后,还能保持状况,再进入一个新的Session之后,就恢复状况管理的本领,但此时状况管理需求利用session.update大概session.saveOrUpdate,这就是Hibernate Reference中提到的“requires a slightly different programming model ”

目前正式进入本话题:

简单的来说,update和saveOrUpdate是用来对跨Session的PO举行状况管理的.

假定你的PO不需求跨Session的话,那么就不需求用到,比方你翻开一个Session,对PO举行操作,然后关闭,之后这个PO你也不会再用到了,那么就不需求用update.

因此,我们来看看:

代码

Foo foo=sess.load(Foo.class,id);
foo.setXXX(xxx);
sess.flush();
sess.commit();

PO对象foo的操作都在一个Session生命周期内完成,因此不需求显式的举行sess.update(foo)这样的操作.Hibernate会自动监测到foo对象已经被改正过,因此就向数据库发送一个update的sql.当然假如你非要加上sess.update(foo)也不会错,只不过这样做没有任何必要.

而跨Session的意思就是说这个PO对象在Session关闭之后,你还把它当作一个VO来用,后来你在Session表面又改正了它的属性,然后你又想翻开一个Session,把VO的属性改正保存到数据库里面,那么你就需求用update了.

// in the first session
Cat cat = (Cat) firstSession.load(Cat.class, catId);
Cat potentialMate = new Cat();
firstSession.save(potentialMate);
// in a higher tier of the application
cat.setMate(potentialMate);
// later, in a new session
secondSession.update(cat); // update cat
secondSession.update(mate); // update mate

cat和mate对象是在第一个session中获得的,在第一个session关闭之后,他们就成了PO的第三种状况,和Session已经detached的PO,此时他们的状况信息仍旧被保存下来了.当他们进入第二个session之后,立即便可以举行状况的更新.但是由于对cat的改正操作:cat.setMate(potentialMate); 是在Session表面举行的,Hibernate不大概知道cat对象已经被改过了,第二个Session并不知道这种改正,因此一定要显式的调用secondSession.update(cat); 告诉Hibernate,cat对象已经改正了,你必须发送update的sql了.

所以update的作用就在于此,它只会被用于当一个PO对象跨Session举行状况同步的时刻才需求写.而一个PO对象当它不需求跨Session举行状况管理的时刻,是不需求写update的.


  以上是“<b>Hibernate:update和saveOrUpdate详解</b>[Java编程]”的内容,如果你对以上该文章内容感兴趣,你可以看看七道奇为您推荐以下文章:

  • <b>hosts是什么 hosts文件在什么位置 若何改正hosts</b>
  • <b>在 Windows 8 中手动安装语言包</b>
  • <b>五个常见 PHP数据库问题</b>
  • Windows中Alt键的12个高效快速的利用本领介绍
  • <b>MySQL ORDER BY 的实现解析</b>
  • <b>详解MySQL存储历程参数有三种范例(in、out、inout)</b>
  • <b>Win8系统恢复出来经典的开始菜单的办法</b>
  • <b>Win8系统花屏怎么办 Win8系统花屏的办理办法</b>
  • <b>Windows 7系统下无线网卡安装</b>
  • <b>为什么 Linux不需求碎片整理</b>
  • <b>Windows 8中删除账户的几种办法(图)</b>
  • <b>教你如安在win7下配置路由器</b>
  • 本文地址: 与您的QQ/BBS好友分享!
    • 好的评价 如果您觉得此文章好,就请您
        0%(0)
    • 差的评价 如果您觉得此文章差,就请您
        0%(0)

    文章评论评论内容只代表网友观点,与本站立场无关!

       评论摘要(共 0 条,得分 0 分,平均 0 分) 查看完整评论
    Copyright © 2020-2022 www.xiamiku.com. All Rights Reserved .