我在 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
方法。不要忘记注册事件监听器。
方法四:
您还可以分别对 createdOn
和 lastUpdate
字段使用 @CreationTimestamp
和 @UpdateTimestamp
注释。
关于java - hibernate 5 : Auto updated timestamp field for last modified,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40969919/