如何使用Hibernate仅更新所有实体属性的一部分

Bru*_*pos 6 java orm json hibernate jpa

我收到一个包含30个字段的JSON,我的实体是从这个JSON构建的.问题是:不应更新两个字段(两个日期).

如果我使用entity.merge,两个字段都将更新.

如何避免这两个字段更新?

也许使用标准.例如?

如果没有我写大量的HQL,有没有办法做到这一点?

Vla*_*cea 11

这篇文章详细解释了你的问题,但我也将在这里总结一下.

如果您永远不想更新这两个字段,可以使用以下标记来标记它们updatable=false:

@Column(name="CREATED_ON", updatable=false)
private Date createdOn;
Run Code Online (Sandbox Code Playgroud)

一旦你加载一个实体并修改它,只要当前SessionEntityManager打开,Hibernate就可以通过脏检查机制跟踪更改.然后,在刷新期间,SQL将执行更新.

如果您不喜欢UPDATE语句中包含所有列,则可以使用动态更新:

@Entity
@DynamicUpdate
public class Product {
   //code omitted for brevity
}
Run Code Online (Sandbox Code Playgroud)

然后,只有修改后的列将包含在UPDATE语句中.