设定创建和更新的时间与休眠在Xml映射
-
26-09-2019 - |
题
我使用的休眠与 Xml 映射。我有一个实体,有两个领域 指出 和 updateDate 的类型 timestamp
, 有待填补与目前UTC时当的实体保存和更新。我知道的存在 @PrePersist
和 @PreUpdate
注释,但是我不知道如何使用他们的相当于在我Xml映射。
再次,我想知道,如果休眠以某种方式支持本身的更新和创立时设定的。
感谢
解决方案
我知道的存在
@PrePersist
和@PreUpdate
注释,但是我不知道如何使用他们的相当于在我Xml映射。
该Hibernate3 活动结构 提供了类似的东西,你可以登记的监听器 PreInsertEvent
, PreUpdateEvent
或 SaveOrUpdateEvent
(见的 org.hibernate.event
包装为一个完整的列表)的设置和更新创建/更新日期。
另一个办法是使用一个 拦截, , Session
范围或 SessionFactory
-范围和设置两个 createDate
和 updateDate
在 onSave(...)
, 更新 updateDate
在 onFlushDirty(...)
.
更新: 我要走了我原来的建议如下但我认为正确的做法(应该是我的初步答复)是使用拦截或事件的架构。
你可以使用 generated
属性的 timestamp
得到 creationDate
和 updateDate
产生的数据库,插入和对插入和更新分别为:
<class name="MyEntity" table="MY_ENTITY">
<id .../>
<timestamp name="createDate" generated="insert" ... />
<timestamp name="updateDate" generated="always" ... />
...
</class>
请参考的部分 所产生的特性 对于全部细节。
备选案文1
它的出现, timestamp
不支持 generatead
因此,我的建议不会的工作。尽管如此,具有读该文件更加谨慎,我的理解是, timestamp
是的替代版本控制和我不认为这是一个适当的选择等领域 createDate
和 updateDate
(它可以工作以后,但这不是 timestamp
是为)。
所以我会实际上仍在使用 所产生的特性 但 与 简单的性质 而不是的 timestamp
:
<class name="MyEntity" table="MY_ENTITY">
<id .../>
<property name="createDate" update="false" insert="false" generated="insert" ... />
<property name="updateDate" update="false" insert="false" generated="always" ... />
...
</class>
在数据库的水平,这将需要采用一种触发器 updateDate
列。的 createDate
列,使用一些东西喜欢 current_timestamp
作为默认的价值将会很好地工作。但是,触发器也许不想...
备选案文2
为了避免触发的 备选案文1, 一变化将使用 updateDate
对于版本(并因此它作为地图 timestamp
):
<class name="MyEntity" table="MY_ENTITY">
<id .../>
<timestamp name="updateDate" ... />
<property name="createDate" update="false" insert="false" generated="insert" ... />
...
</class>
同样做法,选择1 createDate
, ,使用默认值在数据库的水平。
选项3
看到这个答案...
其他提示
时间戳在休眠显然总是自动更新实体时改变,所以你不能使用 <timestamp>
映对建立日期。但是,你可以保存它作为一个简单的 java.util.Date
财产,它与初始化 new Date()
.
对于更新时间戳,试试这个:
public class MyEntity {
...
private Date updateDate;
...
}
<class name="MyEntity" table="MY_ENTITY">
<id .../>
<timestamp name="updateDate" access="field" column="UPDATE_DATE"/>
...
</class>
注意, timestamp
必须来后 id
在映射。
FYI这里是一个 参考的 timestamp
属性.