关于hibernate的一点讨论

xiaozhi7566 2015-06-03 06:11:52
加精
hibernate的session.update(Object)方法,是会update全部字段,但是在实际中,我们往往不需要去更新全部字段。
设想这样一个场景:一个表,有十几个字段,id是唯一标识,state是审批状态,现在我们要实现数据审批功能。
如果使用操作对象的方式来实现,首先,要根据id获取到对象,然后setState,最后update对象。整个过程最终映射的sql应该是:
select column1,column2......from table where id=?
update table set column1=?,column2=?..... where id=?
假如hibernate实现了局部更新字段的功能:即只有调用了setXXX方法的属性才会update
那么上面那个场景,我们只需要new 一个对象,然后setId,setState,然后update对象,最终生成的sql就是:
update table set state=? where id=?

两者比较,后者代码更简练,且性能更高。

问题来了,为啥hibernate不实现这个局部更新字段的功能呢?
(当然,我知道,使用Hql可以实现,我现在讨论的是使用操作对象的方式)
请各位大神讨论!谢谢
...全文
1836 20 打赏 收藏 转发到动态 举报
写回复
用AI写文章
20 条回复
切换为时间正序
请发表友善的回复…
发表回复
arthaslk001 2015-07-09
  • 打赏
  • 举报
回复
Hibernate更新局部字段时,一般来说先用session的get()方法得到一个对象obj,然后再obj.setXxx()更新局部字段,不需要显示的调用session的update()方法,因为在提交事务之前会先调用session的flush()方法来检查session缓存里的对象是否和数据表的对象一致,不一致则会向数据库自动发送update语句,所以不需要显示的调用session 的update方法
love331334055 2015-06-27
  • 打赏
  • 举报
回复
在配置文件或实体上指定动态更新与动态添加为true即可
xyghehehehe 2015-06-27
  • 打赏
  • 举报
回复
hibernate中不止一种方式可以满足楼主的需求,不是它没实现,而是楼主对hibernate不够了解而已
laoer_2002 2015-06-22
  • 打赏
  • 举报
回复
zixiangxiong1987 2015-06-17
  • 打赏
  • 举报
回复
在映射配置中配置dynamic-update="true" 即可实现 只更新发生变化的字段,自己写个demo测试就知道了!!
master_y 2015-06-10
  • 打赏
  • 举报
回复
new一个对象里面的所有字段都为空,所以我感觉第一种好用,一直用的第一种
仰望昆仑山 2015-06-10
  • 打赏
  • 举报
回复
有办法实现的,写个方法,拷贝非空属性到目标对象
足球中国 2015-06-06
  • 打赏
  • 举报
回复
鸣鸣Amadues 2015-06-05
  • 打赏
  • 举报
回复
局部更新和全部更新都有的
tianfang 2015-06-05
  • 打赏
  • 举报
回复
这个可以在DAO层单独写个方法,使用HQL只更新特定字段 hibernate是技术框架,单独更新字段和业务需求结合的更紧密,在技术层缺乏通用性,所以hibernate不实现
lsongiu86 2015-06-04
  • 打赏
  • 举报
回复
有这个功能,看看dynamic-update="true" dynamic-insert="true" 这个相关的东东吧
聪头 2015-06-04
  • 打赏
  • 举报
回复
hibernate.load()是一条数据,单纯从这个函数是不知道下一步是update一个字段还是多个字段,因此就使用统一方式update整个数据
  • 打赏
  • 举报
回复
操作对象的方式,也可以实现局部更新啊,只要你把对象局部属性更新后,直接用update方法更新对象即可。
泪的告白篇 2015-06-03
  • 打赏
  • 举报
回复
一楼说的没错,但是实际上我们经常用的不是update,而是save
「已注销」 2015-06-03
  • 打赏
  • 举报
回复
建议楼主先把hibernate搞清楚再发帖,谁告诉你没有这个功能的
finemi 2015-06-03
  • 打赏
  • 举报
回复
持久化状态的对象就是只更新变化的,update方法用来更新托管对象的,至于update更新全部字段这问题不好说,个人感觉hibernate带来了方便快捷,但是失去了灵活性能。 还有就是貌似很多数据库对于同内容字段不会更新,比如mysql,其他不知道。 这样看来问题也不是很大

67,513

社区成员

发帖
与我相关
我的任务
社区描述
J2EE只是Java企业应用。我们需要一个跨J2SE/WEB/EJB的微容器,保护我们的业务核心组件(中间件),以延续它的生命力,而不是依赖J2SE/J2EE版本。
社区管理员
  • Java EE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧