我在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中完成它。
答案 0 :(得分:6)
方法1:
您可以使用以下内容:
@PrePersist
protected void onCreate() {
createdOn = new Date();
}
@PreUpdate
protected void onUpdate() {
lastUpdate = new Date();
}
注意:如果您使用的是Session
API,则JPA回调功能无法使用。
方法2:
您可以使用lastUpdate
注释对@Version
字段进行注释。除了自动填充字段外,它还将为实体引入乐观锁定。对于createdOn
字段,您只需在实体的默认构造函数中初始化它。
方法3:
使用事件侦听器并手动更新相关属性。您需要创建一个扩展DefaultSaveOrUpdateEventListener
的侦听器并覆盖onSaveOrUpdate
方法。不要忘记注册事件监听器。
方法4:
您还可以分别对@CreationTimestamp
和@UpdateTimestamp
字段使用createdOn
和lastUpdate
注释。