我尝试在网上搜索此内容,但没有成功。有没有办法使用hibernate来执行幂等更新。
一种用例是使用 HTTP PUT 通过 REST API 更新数据库中的特定字段。例如,如果我有一个包含以下列的数据库:Id、Name、Phone、UpdateDate 并且我更新了Phone 字段(特定的Id)多次使用相同的值,只有我的第一个操作必须更新电话(并且还更改我的UpdateDate)。后续更新不得对记录(和 UpdateDate)产生影响。
虽然这可以在应用程序中实现,方法是首先获取记录并将其与我的输入值进行比较,然后再执行更新。我想知道 Hibernate 是否有任何内置功能?
I tried searching this over the net but in vain. Is there a way to use hibernate to perform an idempotent update.
One use case is to use HTTP PUT to update a specific field in the database via a REST API. So for example, if I have a database with columns : Id, Name, Phone, UpdateDate and I update the Phone field (of a specific Id) with the same value multiple times only my first action must update the Phone(and also change my UpdateDate). Subsequent updates must have no effect on the record (and UpdateDate).
While this can be implemented in an application by first getting the record and comparing it against my input value before performing an update. I was wondering whether Hibernate has any inbuilt features?
发布评论
评论(1)
在休眠中,如果您获取一个对象并尝试修改它的其中一个属性并提交事务。 Hibernate 将新值与旧值进行比较。 仅当至少一个属性的新值与旧值不同时,才对实体的所有持久属性发出 UPDATE。
示例:
EntityA a = hibernateSession.find(EntityA.class, id);
a.setPhone(newPhoneValue);
hibernateSession.flush()。
Hibernate 将新值与旧值进行比较。如果 propertyB 的旧值和新值不同,则对 x 的所有持久属性发出 UPDATE。发出如下更新:
UPDATEEntityA setphone=?, name=?, updateDate=? WHERE id=?
如果您愿意,可以使用 动态更新 和 动态插入映射。
将dynamic-update设置为true时,hibernate将发出一个不带
name
列的UPDATE
,因为它没有改变。更新实体A设置电话=?,更新日期=?哪里 id=?
In hibernate if you get an object and try to modify one of it`s property and commit the transaction. Hibernate compares new values to the old values. Issues an UPDATE for all persistent properties of the entity only if the new value of at least one of the property is different than the old value.
Example:
EntityA a = hibernateSession.find(EntityA.class, id);
a.setPhone(newPhoneValue);
hibernateSession.flush().
Hibernate compares new values to the old values. Issues an UPDATE for all persistent properties of x if the old and the new value of propertyB are different.Issue an update like :
UPDATE entityA set phone=?, name=?, updateDate=? WHERE id=?
If you want you can use dynamic-update and dynamic-insert in the mapping.
With dynamic-update set to true hibernate will issue a
UPDATE
without thename
column because it has not change.UPDATE entityA set phone=?, updateDate=? WHERE id=?