java - 我可以配置 Hibernate/JPA 在仅修改非时间戳字段时更新实体记录吗?

标签 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,或者我是否必须自己显式检查这一点代码?

最佳答案

更新(感谢评论):

由于 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/

相关文章:

java - 用 Java 构建处理数据库的软件

java - ORM 过程中类名重要吗?

eclipse - 服务器不启动spring app

spring - JPA级联删除

java - Hibernate 每个国家/地区一个实体多个表

java - 关于jsf bean注入(inject)spring bean的一个问题

java - POI 3.17 中的“HSSFCellStyle.BORDER_THIN”替代方案

java - Java按索引对数组进行二维排序

java - @OneToMany 和 @ElementCollection 之间的区别?

OC4J 中的 java.lang.NoSuchMethodError : javax. persistence.OneToMany.orphanRemoval()Z