目前我有一个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
的调用,或者我是否必须在代码中自己明确地检查它?
答案 0 :(得分:3)
更新(感谢评论):
由于不推荐使用Hibernate @Entity
注释的v4,并且允许动态更新,因此您应该使用@DynamicUpdate(true)
(与@SelectBeforeUpdate(true)
结合使用)
如果您想阻止未修改的字段包含在UPDATE查询中,请在您的实体上添加:
@org.hibernate.annotations.Entity(dynamicUpdate=true) // update only changed fields
public class ...