Hibernate - 来自数据库的自动 created_date 和 updated_date

Posted

技术标签:

【中文标题】Hibernate - 来自数据库的自动 created_date 和 updated_date【英文标题】:Hibernate - automatic created_date and updated_date from the database 【发布时间】:2013-09-26 05:56:31 【问题描述】:

我们需要在每个表中添加两列 - created_date 和 updated_date。 数据库类型可以是以下任何一种:Oracle、mysql、PostgreSQL、CouchDB。

这两列应存储日期和时间。 created_date 仅应在创建行时填写。 每次更新一行时都应填写 updated_date(创建期间也是如此)。

该解决方案适用于将运行大量 Hibernate JVM 的云。 由于没有单一的 JVM,它们有时可能会不同步。 所以我们不希望解决方案在这两列中填充 JVM 时间。

在 Hibernate 中是否有与 DB 无关的方法来执行此操作? 我们希望将日期创建/更新的责任交给数据库本身。 触发器将是我们想要尝试的最后一个选项,因为为每个表生成它会很麻烦。

理想的解决方案是在 JPA/Hibernate 中添加某种注释,这将指示 ORM 工具在插入/更新期间从数据库创建或更新日期。

【问题讨论】:

我尝试使用以下 SQL(用于 Oracle):
 create table tmptmp (id number(10), ct TIMESTAMP DEFAULT CURRENT_TIMESTAMP, ut TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE TIMESTAMP ); 
但它给了我错误:命令行错误:5 列:42 错误报告:SQL 错误:ORA-00907:缺少右括号 00907。00000 -“缺少右括号” *原因:*操作:
【参考方案1】:

找到解决方案,并在此处得到很好的解释:Custom SQL for Columns - PrismoSkills

此解决方案与 DB 无关且对 Hibernate 友好。

【讨论】:

以上是关于Hibernate - 来自数据库的自动 created_date 和 updated_date的主要内容,如果未能解决你的问题,请参考以下文章

spring+hibernate:自动装配依赖注入失败

Laravel 5.2 - 使用 jquery 自动完成下拉菜单

当实体未更改时,Hibernate 在刷新期间保持实体

Hibernate DuplicateMappingException 与来自不同数据库的 bean

Jpa Join 查询与来自两个表的数据,org.hibernate.MappingException:没有 JDBC 类型的方言映射:2002

使用自动创建表时,Hibernate 不会自动为数据库创建序列