gpt4 book ai didi

java - Hibernate 中的有效实体更新?

转载 作者:行者123 更新时间:2023-12-02 05:53:50 25 4
gpt4 key购买 nike

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

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

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

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

session.updateOnlyNotNullFields(product);

如何在 Hibernate 中执行此操作?

最佳答案

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

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

dynamic-update (optional - defaults to false): specifies that UPDATE SQL should be generated at runtime and can contain only those columns whose values have changed.

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

dynamicUpdate: allow dynamic SQL for updates

但我认为你担心太多了。仅在特殊和非常特殊的情况下使用上述内容。

关于java - Hibernate 中的有效实体更新?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2398981/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com