当仅修改非时间戳字段时,是否可以将Hibernate / JPA配置为更新实体记录?

时间:2012-01-10 17:25:09

标签: java hibernate jpa persistence

目前我有一个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的调用,或者我是否必须在代码中自己明确地检查它?

1 个答案:

答案 0 :(得分:3)

更新(感谢评论):

由于不推荐使用Hibernate @Entity注释的v4,并且允许动态更新,因此您应该使用@DynamicUpdate(true)(与@SelectBeforeUpdate(true)结合使用)


如果您想阻止未修改的字段包含在UPDATE查询中,请在您的实体上添加:

@org.hibernate.annotations.Entity(dynamicUpdate=true) // update only changed fields
public class ...