如何在hibernate中“有效”更新实体,就像使用SQL一样。
例如:我有一个Product实体,它有一个字段名为createTime。当我使用session.saveOrUpdate(product)时,我必须从数据库中获取这个字段,然后设置为产品,然后更新。实际上,每当我使用session.saveOrUpdate()时,我都会更新所有字段,即使我只需要更新一个字段。但是大多数时候,我们传递给DAO层的值对象并不能包含所有的字段信息,就像产品中的createDate一样,我们很少需要更新这个字段。
如何只更新选定的字段?当然,我可以使用HQL,但这将分离保存和更新逻辑。
如果Hibernate有这样的方法就更好了:
session.updateOnlyNotNullFields(product);我如何在Hibernate中做到这一点?
发布于 2010-03-08 11:14:46
默认情况下,Hibernate不使用动态更新,而是更新整个对象。即使对于大型实体,由此产生的开销也是最小的,您不必担心这一点。
不过,可以通过在class元素上将dynamic-update属性设置为true来更改此行为:
UPDATE SQL (可选-缺省为false):指定更新dynamic-update应在运行时生成,并且只能包含那些值已更改的列。
这是等价的注释(在@org.hibernate.annotations.Entity上,它是JPA的扩展):
dynamicUpdate:允许动态SQL进行更新
但我觉得你担心得太多了。只有在特殊和非常特殊的情况下才能使用上述方法。
发布于 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可以帮助你!
https://stackoverflow.com/questions/2398981
复制相似问题