gpt4 book ai didi

java - Hibernate 幂等更新

转载 作者:行者123 更新时间:2023-12-04 06:16:12 30 4
gpt4 key购买 nike

我试着在网上搜索这个,但徒劳无功。有没有办法使用 hibernate 来执行幂等更新。

一个用例是使用 HTTP PUT 通过 REST API 更新数据库中的特定字段。例如,如果我有一个包含列的数据库:Id、Name、Phone、UpdateDate 并且我多次使用相同的值更新 Phone 字段(特定 Id),只有我的第一个操作必须更新 Phone(并且还更改我的更新日期)。后续更新必须对记录(和更新日期)没有影响。

虽然这可以通过在执行更新之前首先获取记录并将其与我的输入值进行比较来在应用程序中实现。我想知道 Hibernate 是否有任何内置功能?

最佳答案

在 hibernate 中,如果您获得一个对象并尝试修改它的一个属性并提交事务。 Hibernate 将新值与旧值进行比较。为实体的所有持久属性发出更新 仅当至少一个属性的新值与旧值不同时。

例子:

  • 按 id 查找 EntityA。 Hibernate 为实体(以及任何非惰性多对一实体)发出一个 SELECT,它会记住原始值。 EntityA a = hibernateSession.find(EntityA.class, id);
  • 在 entityA 上设置一些属性。 a.setPhone(newPhoneValue);
  • 提交事务,触发hibernateSession.flush(). Hibernate 将新值与旧值进行比较。如果 propertyB 的旧值和新值不同,则为 x 的所有持久属性发出 UPDATE。

  • 发出如下更新: UPDATE entityA set phone=?, name=?, updateDate=? WHERE id=?
    如果你愿意,你可以使用 dynamic-updatedynamic-insert在映射中。

    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.

    dynamic-insert (optional - defaults to false): specifies that INSERT SQL should be generated at runtime and contain only the columns whose values are not null.



    将动态更新设置为 true hibernate 将发出 UPDATE没有 name列,因为它没有改变。
    UPDATE entityA set phone=?, updateDate=? WHERE id=?

    关于java - Hibernate 幂等更新,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7210947/

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