我使用的休眠与 Xml 映射。我有一个实体,有两个领域 指出updateDate 的类型 timestamp, 有待填补与目前UTC时当的实体保存和更新。我知道的存在 @PrePersist@PreUpdate 注释,但是我不知道如何使用他们的相当于在我Xml映射。

再次,我想知道,如果休眠以某种方式支持本身的更新和创立时设定的。

感谢

有帮助吗?

解决方案

我知道的存在 @PrePersist@PreUpdate 注释,但是我不知道如何使用他们的相当于在我Xml映射。

该Hibernate3 活动结构 提供了类似的东西,你可以登记的监听器 PreInsertEvent, PreUpdateEventSaveOrUpdateEvent (见的 org.hibernate.event 包装为一个完整的列表)的设置和更新创建/更新日期。

另一个办法是使用一个 拦截, , Session范围或 SessionFactory-范围和设置两个 createDateupdateDateonSave(...), 更新 updateDateonFlushDirty(...).


更新: 我要走了我原来的建议如下但我认为正确的做法(应该是我的初步答复)是使用拦截或事件的架构。

你可以使用 generated 属性的 timestamp 得到 creationDateupdateDate 产生的数据库,插入和对插入和更新分别为:

<class name="MyEntity" table="MY_ENTITY">
  <id .../>
  <timestamp name="createDate" generated="insert" ... />
  <timestamp name="updateDate" generated="always" ... />
  ...
</class>

请参考的部分 所产生的特性 对于全部细节。

备选案文1

它的出现, timestamp 不支持 generatead 因此,我的建议不会的工作。尽管如此,具有读该文件更加谨慎,我的理解是, timestamp 是的替代版本控制和我不认为这是一个适当的选择等领域 createDateupdateDate (它可以工作以后,但这不是 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 属性.

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top