首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >Hibernate中的有效实体更新?

Hibernate中的有效实体更新?
EN

Stack Overflow用户
提问于 2010-03-08 10:36:15
回答 2查看 3.4K关注 0票数 3

如何在hibernate中“有效”更新实体,就像使用SQL一样。

例如:我有一个Product实体,它有一个字段名为createTime。当我使用session.saveOrUpdate(product)时,我必须从数据库中获取这个字段,然后设置为产品,然后更新。实际上,每当我使用session.saveOrUpdate()时,我都会更新所有字段,即使我只需要更新一个字段。但是大多数时候,我们传递给DAO层的值对象并不能包含所有的字段信息,就像产品中的createDate一样,我们很少需要更新这个字段。

如何只更新选定的字段?当然,我可以使用HQL,但这将分离保存和更新逻辑。

如果Hibernate有这样的方法就更好了:

代码语言:javascript
复制
session.updateOnlyNotNullFields(product);

我如何在Hibernate中做到这一点?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2010-03-08 11:14:46

默认情况下,Hibernate不使用动态更新,而是更新整个对象。即使对于大型实体,由此产生的开销也是最小的,您不必担心这一点。

不过,可以通过在class元素上将dynamic-update属性设置为true来更改此行为:

UPDATE SQL (可选-缺省为false):指定更新dynamic-update应在运行时生成,并且只能包含那些值已更改的列。

这是等价的注释(在@org.hibernate.annotations.Entity上,它是JPA的扩展):

dynamicUpdate:允许动态SQL进行更新

但我觉得你担心得太多了。只有在特殊和非常特殊的情况下才能使用上述方法。

票数 10
EN

Stack Overflow用户

发布于 2011-05-04 15:41:01

如果您使用的是最新的hibernate(3.5.5),您可以原生sql,如下所示:

session.createSQLQuery("update table_name set column_1=:col1 ").executeUpdate()。这种方式不需要先加载或者先获取update.just更新,因为使用sql.Hope可以帮助你!

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/2398981

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档