gpt4 book ai didi

hibernate - 在 Xml 映射中使用 Hibernate 设置创建和更新时间

转载 作者:行者123 更新时间:2023-12-02 23:32:02 27 4
gpt4 key购买 nike

我正在将 Hibernate 与 Xml 映射结合使用。我有一个实体,它有两个 timestamp 类型的字段 creationDateupdateDate,当实体创建时,必须用当前 UTC 时间填充这两个字段。坚持并更新。我知道 @PrePersist@PreUpdate 注释的存在,但我不知道如何在我的 Xml 映射中使用它们的等效项。

我再次想知道 Hibernate 是否以某种方式本地支持更新和创建时间集。

谢谢

最佳答案

I know about the existence of the @PrePersist and @PreUpdate annotations, but i don't know how to use their equivalent in my Xml mappings.

Hibernate3 event architecture提供了等效的东西,你可以注册 PreInsertEvent 的监听器, PreUpdateEventSaveOrUpdateEvent (有关完整列表,请参阅 org.hibernate.event 包)设置和更新创建/更新日期。

另一种方法是使用 interceptor ,或者Session -范围或SessionFactory -scoped 并设置 createDateupdateDateonSave(...) ,更新updateDateonFlushDirty(...) .

<小时/>

更新:我在下面留下了我最初的建议,但我认为正确的方法(应该是我最初的答案)是使用拦截器或事件架构。

您可以使用 generated timestamp 属性 得到 creationDate updateDate 由数据库分别在插入和插入和更新时生成:

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

请参阅 generated properties 部分了解完整详细信息。

选项 1

看来timestamp 不支持 generatead 所以我的建议行不通。尽管如此,在更仔细地阅读文档后,我的理解是 timestamp 是版本控制的替代方案,我认为它对于像 createDate 这样的字段来说不是合适的选择。 updateDate (它可能适用于后者,但这不是 timestamp 的用途)。

所以我实际上仍然会使用 generated properties 但是simple properties而不是 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>

createDate 的选项 1 相同的方法,在数据库级别使用默认值。

选项 3

请参阅此答案的顶部...

关于hibernate - 在 Xml 映射中使用 Hibernate 设置创建和更新时间,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2635046/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com