Java Hibernate DateCreated,DateModified列来自DB而非VM(应用程序)
使用Hibernate 3.5.1和MSSQL 2008 Hi尝试实现典型的DateCreated和DateModified列。我遇到的问题是,时间必须从DB设置,而不是从应用程序设置 对于DateCreated,我可以将属性设置为generated=always,并将MS SQL 2008上的默认约束(yes)设置为默认值GetDate() 我该怎么做呢 对于DateCreated,我可以将属性设置为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)设置为默认值
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。幸运的是,这些日期只是管理员审核所必需的,所以从技术上讲,我不需要将生成的值带回应用程序。