【问题标题】:Hibernate DateCreated, DateModified columns from DB not VM(App)来自数据库而不是 VM(应用程序)的休眠 DateCreated、DateModified 列
【发布时间】:2010-09-20 15:17:16
【问题描述】:

使用 Hibernate 3.5.1 和 MSSQL 2008

您好,尝试实现典型的 DateCreated 和 DateModified 列。我遇到的问题是时间必须从数据库而不是应用程序设置。

对于 DateCreated,我可以将属性设置为 generated = always 并将 MS SQL 2008 上的默认约束(是的,读取正确的 MS)设置为 GetDate() 的默认值

我将如何处理 DateModified?

【问题讨论】:

    标签: java hibernate orm timestamp


    【解决方案1】:

    对于 DateCreated,我可以将属性设置为 generated = always,并将 MS SQL 2008 上的默认约束(是的,读取正确的 MS)设置为 GetDate() 的默认值

    好吧,您实际上应该使用generated = insert 作为创建日期,它不应该在后续更新时更改,这将在更新期间为该列保存一个额外的选择。

    我将如何处理 DateModified?

    这就是你应该使用generated = always(以及数据库端的触发器)的地方。

    以下是参考文档对它们的描述:

    5.6. Generated properties

    生成的属性是属性 它们的值由 数据库。通常,休眠 刷新对象所需的应用程序 包含任何属性 数据库正在生成值。 将属性标记为已生成, 但是,让应用程序委托 这个责任交给Hibernate。什么时候 Hibernate 发出一个 SQL INSERT 或 更新已定义的实体 生成的属性,它立即 之后发出选择以检索 生成的值。

    标记为已生成的属性必须 另外是不可插入的,并且 不可更新。只有版本, 时间戳和简单的属性,可以 被标记为已生成。

    • never:(默认):给定的属性值不是在内部生成的 数据库。

    • insert:给定的属性值是在插入时生成的,但不是 在后续更新中重新生成。 像 created-date 这样的属性属于 这个类别。即使版本和 时间戳属性可以标记为 生成,此选项不 可用。

    • always: 属性值在插入和打开时都生成 更新。

    【讨论】:

    • 触发器是MSSQL中的魔鬼,所以必须有另一种方式吗?也许列上的公式?
    • @user432024 我不知道为什么触发器在 MSSQL 中特别邪恶,但是...The issue I have is that the time must be set from the DB not the application 如果没有DateModified 的触发器,我不知道该怎么做 if 你想在数据库端做。
    • 怎么样? formula="arbitrary SQL expression" docs.jboss.org/hibernate/core/3.3/reference/en/html/… 或时间戳属性?
    • @user432024 公式属性未持久化 AFAIK。
    • 我正在考虑使用自定义 sql。幸运的是,只有管理员审核需要这些日期,所以从技术上讲,我不需要将生成的值带回应用程序。
    猜你喜欢
    • 1970-01-01
    • 2015-01-29
    • 2013-12-20
    • 1970-01-01
    • 2018-12-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多