发帖    主题    评论    推荐    标签    作者    订阅    查搜    注册   登陆   关注
 
面向对象 设计模式 领域驱动设计 云架构 框架 开发教程 SOA 大数据 扩展性 并发编程 EDA 分布式 函数编程
1 2 下一页 Go 2

hibernate更新问题!

2003-07-31 09:50
赞助商链接

把一个对象find出来之后,只修改了其中一两个字段,然后调用update把对象存储到数据库。看到hibernate产生的sql语句类似于这样:

update organization set orgname=?, type=?, createTime=?, modifiedTime=?, address=?, postalcode=?, email=?, telephone=?, homepage=?, orgDesc=?, managerId=? where id=?

就是说一个session.update()方法,会把整个记录全部更新一次。但实际上我只需要修改其中的一个字段而以。
有没有办法让hibernate只更新修改过的字段或指定更新个别字段?

这样作可以从一定程度上避免覆盖到别人修改的字段,同时提高效率。不知道用hibernate怎么作。

1
2003-07-31 14:33

顶一下

2003-08-01 09:26

没人回答???ym

2003-08-01 09:44

不Session.update()直接Session.flush()试一下

2003-08-01 12:07

看这个link:
http://www.jdon.com/jive/thread.jsp?forum=62&thread=8457

引用------------------------------------------------------------
update语句是在Hibernate的Configuration的时候生成的,不能动态改变

为什么update的时候所有的属性都一起update,而不是只更新改变字段,其实这是一个比较值得探讨的问题。

如果想要做到只更新改变了的字段,必须做到两点:
1、对PO的每个属性设置version进行状态跟踪
2、update语句是动态生成的,在实际向数据库更新的时候,依次检查每个属性的version,决定哪些属性需要更新,动态构造update语句。

单单要做到上述第一点,就势必要给PO的操作带来沉重的负担,每次属性的存取都要判断version,严重影响PO的性能。会带来整个Hibernate性能的降低。而要做到第二点,临时构造update语句时间消耗很客观,也会极大降低update的速度。

Hibernate的PO状态管理是当任何属性值改变的时候,version就被标记,表明PO被更新了。实现很简单而有效,效率非常高。而update语句insert,delete和某几个select语句是在Hibernate初始化过程中就构造好了,不需要用的时候临时构造。

综合评价得与失,对PO属性进行状态管理固然可以稍微降低数据库负担,但是会极大影响Hibernate的运行效率,终究得不偿失。

2Go 1 2 下一页

赞助商链接

赞助商链接

返回顶部

移动版 关于本站 使用帮助 联系管理员 最佳分辨率1366x768
OpenSource JIVEJDON Powered by JdonFramework Code © 2002-20 jdon.com