java - hibernate 5 : Auto updated timestamp field for last modified

标签 java hibernate

我在 Hibernate 5 中有一个实体,它有创建时间戳和上次修改时间戳。我希望他们获得自动更新。

/**
 * Time of creation of entity
 */
@Column(name = "created_on", nullable = false)
private Timestamp createdOn;

/**
 * Time of last update
 */
@Column(name = "last_update", nullable = false)
private Timestamp lastUpdate;

我是用 Hibernate 4 做的,使用映射 xml 文件如下:

    <property name="createdOn" type="java.sql.Timestamp" generated="insert" not-null="true">
        <column name="created_on" sql-type="timestamp" default="CURRENT_TIMESTAMP"/>
    </property>
    <property name="lastUpdate" type="java.sql.Timestamp" generated="always" not-null="true">
        <column name="last_update" sql-type="timestamp" default="CURRENT_TIMESTAMP"/>
    </property>

但不知道如何在 Hibernate 5 中使用注解来做到这一点。

最佳答案

方法一:

您可以使用如下内容:

@PrePersist
protected void onCreate() {
createdOn = new Date();
}

@PreUpdate
protected void onUpdate() {
 lastUpdate = new Date();
}

注意:如果您使用 Session API,JPA 回调将不起作用。

方法二:

您可以使用@Version 注释来注释lastUpdate 字段。除了自动填充字段外,它还将为实体引入乐观锁定。对于 createdOn 字段,您可以简单地在实体的默认构造函数中对其进行初始化。

方法三:

使用事件监听器并手动更新相关属性。您需要创建一个扩展 DefaultSaveOrUpdateEventListener 的监听器并覆盖 onSaveOrUpdate 方法。不要忘记注册事件监听器。

方法四: 您还可以分别对 createdOnlastUpdate 字段使用 @CreationTimestamp@UpdateTimestamp 注释。

关于java - hibernate 5 : Auto updated timestamp field for last modified,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40969919/

相关文章:

java - 用 Scala 继承 'object'

java - 如何在 while 循环中获取新的操作命令

java - 创建具有固定存在期限的自定义范围

java - criteria.list() 和 sql-query 返回不同的结果集

java - hibernate 列名问题

java - Hibernate - 将 java.util.Calendar 映射到 MySQL BIGINT

java - 为什么返回空数据是否保存在内部存储中,因为没有 sd 卡手机无法工作

java - 将 p 键入 double 时出现错误?

java - Hibernate 数据源连接未关闭

java - JPQL验证错误