Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/webpack/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java Hibernate DateCreated,DateModified列来自DB而非VM(应用程序)_Java_Hibernate_Orm_Timestamp - Fatal编程技术网

Java Hibernate DateCreated,DateModified列来自DB而非VM(应用程序)

Java Hibernate DateCreated,DateModified列来自DB而非VM(应用程序),java,hibernate,orm,timestamp,Java,Hibernate,Orm,Timestamp,使用Hibernate 3.5.1和MSSQL 2008 Hi尝试实现典型的DateCreated和DateModified列。我遇到的问题是,时间必须从DB设置,而不是从应用程序设置 对于DateCreated,我可以将属性设置为generated=always,并将MS SQL 2008上的默认约束(yes)设置为默认值GetDate() 我该怎么做呢 对于DateCreated,我可以将属性设置为generated=always,并将MS SQL 2008上的默认约束(yes)设置为默认值

使用Hibernate 3.5.1和MSSQL 2008

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

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

我该怎么做呢

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

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

我该怎么做呢

这里应该使用
generated=always
(以及数据库端的触发器)

以下是参考文档中关于它们的内容:

生成的属性是属性 它们的值由 数据库。通常,冬眠 刷新对象所需的应用程序 包含其 数据库正在生成值。 将属性标记为已生成, 但是,让应用程序委托 这是冬眠的责任。什么时候 Hibernate发出SQL插入或 已定义的实体的更新 生成属性后,它会立即 随后发出select以检索 生成的值

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

  • never
    :(默认值):给定的属性值不是在 数据库

  • insert
    :给定的属性值是在insert时生成的,但不是 在后续更新时重新生成。 创建日期等属性属于 这一类。即使版本和 时间戳属性可以标记为 生成时,此选项不可用 可用

  • 始终
    :在插入和插入时都会生成属性值 更新


触发器是MSSQL中的魔鬼,所以必须有另一种方法?也许是专栏上的公式?@user432024我不知道为什么触发器对MSSQL特别有害,但是
我的问题是必须从数据库而不是应用程序设置时间
如果您想在数据库端执行此操作,我不知道如何在没有对
DateModified
触发的情况下执行此操作。如何?formula=“任意SQL表达式”或timestamp属性?@user432024公式属性不会自动持久化。我正在考虑使用自定义SQL。幸运的是,这些日期只是管理员审核所必需的,所以从技术上讲,我不需要将生成的值带回应用程序。