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的主要内容,如果未能解决你的问题,请参考以下文章
Laravel 5.2 - 使用 jquery 自动完成下拉菜单
Hibernate DuplicateMappingException 与来自不同数据库的 bean
Jpa Join 查询与来自两个表的数据,org.hibernate.MappingException:没有 JDBC 类型的方言映射:2002