Hibernate 5:自动更新最后修改的时间戳字段

Kul*_*dav 3 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;
Run Code Online (Sandbox Code Playgroud)

我使用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>
Run Code Online (Sandbox Code Playgroud)

但是不知道如何使用注释在Hibernate 5中完成它.

Mub*_*bin 6

方法1:

您可以使用以下内容:

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

@PreUpdate
protected void onUpdate() {
 lastUpdate = new Date();
}
Run Code Online (Sandbox Code Playgroud)

注意:如果您使用SessionAPI,则JPA回调将不起作用.

方法2:

您可以使用注释注释lastUpdate字段@Version.除了自动填充字段外,它还将为实体引入乐观锁定.对于该createdOn字段,您只需在实体的默认构造函数中初始化它.

方法3:

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

方法4: 您还可以分别使用@CreationTimestamp@UpdateTimestamp注释createdOnlastUpdate字段.