目前我有一个 Hibernate 实体类,如下所示:
@Entity
@Table(name = "entity")
public class Entity implements Serializable {
private static final long serialVersionUID = 2040757598327793105L;
@Id
@Column
private int id;
@Column
private String data;
@Column(name = "last_modified")
@Temporal(TemporalType.TIMESTAMP)
private Date lastModified;
}
我发现,即使非时间戳字段未修改(即 data
字段),对 merge
的调用仍然会更新时间戳。我希望时间戳仅在其他数据字段发生更改时更新。
当所有其他数据字段未修改时,我是否可以阻止调用 merge
进行 SQL UPDATE
,或者我是否必须自己显式检查这一点代码?
最佳答案
更新(感谢评论):
由于 Hibernate @Entity
注释 v4 已被弃用,为了允许动态更新,您应该使用 @DynamicUpdate(true)
(与 @SelectBeforeUpdate(true) 结合使用)
)
如果您想防止未修改的字段包含在 UPDATE 查询中,请在您的实体上添加以下内容:
@org.hibernate.annotations.Entity(dynamicUpdate=true) // update only changed fields
public class ...
关于java - 我可以配置 Hibernate/JPA 在仅修改非时间戳字段时更新实体记录吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8807609/