使用Hibernate 3.5.1和MSSQL 2008
您好试图实现典型的DateCreated和DateModified列。我遇到的问题是必须从数据库而不是应用程序设置时间。
对于DateCreated,我可以将该属性设置为generated = always,并将MS SQL 2008上的默认约束(是的,读取右边的MS)设置为默认值GetDate()
我如何为DateModified解决这个问题?
答案 0 :(得分:1)
对于DateCreated,我可以将属性设置为
generated = always
,并将MS SQL 2008上的默认约束(是的,读取右边的MS)设置为默认值GetDate()
那么,您实际上应该使用generated = insert
作为创建日期,它不应该在后续更新时更改,这将在更新期间为此列保存额外的选择。
我如何为DateModified解决这个问题?
这是您应该使用generated = always
(以及数据库端的触发器)的地方。
以下是参考文档对它们的描述:
5.6. Generated properties
生成的属性是属性 它们的值由...生成 数据库。通常,Hibernate 刷新对象所需的应用程序 包含任何属性 数据库正在生成值。 将属性标记为已生成, 但是,让应用程序委托 这对Hibernate负有责任。什么时候 Hibernate发出SQL INSERT或 已定义的实体的更新 生成的属性,它立即 之后发出选择以进行检索 生成的值。
标记为已生成的属性必须 另外是不可插入的 不可更新。只有版本, 时间戳和简单属性都可以 被标记为已生成。
never
:(默认值):未在其中生成给定的属性值 数据库。
insert
:在插入时生成给定的属性值,但不是 在后续更新时重新生成。 像created-date这样的属性属于 这个类别。即使版本和 时间戳属性可以标记为 生成,此选项不是 可用。
always
:在插入和打开时都会生成属性值 更新