来自DB而不是VM(App)的Hibernate DateCreated,DateModified列

时间:2010-09-20 15:17:17

标签: java hibernate orm timestamp

使用Hibernate 3.5.1和MSSQL 2008

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

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

我如何为DateModified解决这个问题?

1 个答案:

答案 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:在插入和打开时都会生成属性值   更新

  •