Hibernate中的有效实体更新?

Saw*_*yer 2 java orm hibernate

如何通过使用SQL在hibernate中"有效"更新实体.

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

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

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

session.updateOnlyNotNullFields(product);
Run Code Online (Sandbox Code Playgroud)

我怎么能在Hibernate中做到这一点?

Pas*_*ent 9

默认情况下,Hibernate不使用动态更新,实际上更新整个对象.即使对于大型实体,由此产生的开销也是IMO最小的,您不必担心它.

通过在元素上设置dynamic-update属性,可以更改此行为:trueclass

dynamic-update(可选 - 默认为false):指定应在运行时生成UPDATE SQL,并且只能包含值已更改的列.

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

dynamicUpdate:允许动态SQL进行更新

但我觉得你太担心了.仅在特殊和非常特殊的情况下使用上述内容.