Java Hibernate幂等更新
我试着在网上搜索,但没有成功。是否有一种方法可以使用hibernate执行幂等更新。 一个用例是使用HTTPPUT通过RESTAPI更新数据库中的特定字段。因此,例如,如果我有一个包含以下列的数据库:Id、Name、Phone、UpdateDate,并且我使用相同的值多次更新Phone字段(特定Id的),那么只有我的第一个操作必须更新Phone(并更改我的UpdateDate)。后续更新必须对记录(和UpdateDate)没有影响。Java Hibernate幂等更新,java,sql,hibernate,http-put,idempotent,Java,Sql,Hibernate,Http Put,Idempotent,我试着在网上搜索,但没有成功。是否有一种方法可以使用hibernate执行幂等更新。 一个用例是使用HTTPPUT通过RESTAPI更新数据库中的特定字段。因此,例如,如果我有一个包含以下列的数据库:Id、Name、Phone、UpdateDate,并且我使用相同的值多次更新Phone字段(特定Id的),那么只有我的第一个操作必须更新Phone(并更改我的UpdateDate)。后续更新必须对记录(和UpdateDate)没有影响。 而这可以在应用程序中实现,方法是首先获取记录并在执行更新之
而这可以在应用程序中实现,方法是首先获取记录并在执行更新之前将其与输入值进行比较。我想知道Hibernate是否有任何内置功能?在Hibernate中,如果您获得一个对象,并尝试修改它的一个属性并提交事务。Hibernate将新值与旧值进行比较。仅当至少一个属性的新值与旧值不同时,才会对实体的所有持久属性发出更新。 例如:
hibernateSession.flush()。
Hibernate将新值与旧值进行比较。如果propertyB的旧值和新值不同,则为x的所有持久属性发出更新updateentitya set phone=?,name=?,updateDate=?其中id=?
如果需要,可以在映射中使用和
动态更新(可选-默认为false):指定该更新
SQL应该在运行时生成,并且只能包含这些列
其值已更改
动态插入(可选-默认为false):指定插入
SQL应该在运行时生成,并且只包含
值不为空
当动态更新设置为true时,hibernate将发出一个更新
,而不显示名称
列,因为它没有更改
updateentitya set phone=?,updateDate=?其中id=?
如何设置UpdateDate?如果您手动设置并告诉Hibernate更新记录,则这将被视为记录的更新。@tkeE2036现在我正在通过程序手动执行此操作。所以,当有一个“放置”更新时,我会检查它是否是一个更改,如果是,我会更改日期。我以前从未尝试过动态更新。我会尝试一下。我有dynamic update true,但是当在触发器中调用更新查询时,hibernate在尝试更新所有字段后抛出异常。调用触发器时,hibernate如何以及为什么尝试运行查询?