java - Hibernate 和 MySQL 的创建时间戳和上次更新时间戳

标签 java hibernate timestamp

对于某个 Hibernate 实体,我们需要存储其创建时间和上次更新时间。你会如何设计这个?

  • 您将在数据库中使用什么数据类型(假设 MySQL,可能与 JVM 处于不同的时区)?数据类型是否支持时区?

  • 您会在 Java 中使用哪些数据类型(日期日历,...)?

  • 您会让谁负责设置时间戳——数据库、ORM 框架(Hibernate)还是应用程序程序员?

  • 您将使用什么注释来进行映射(例如 @Temporal)?

我不仅在寻找可行的解决方案,而且在寻找安全且设计良好的解决方案。

最佳答案

如果您使用 JPA 注释,则可以使用 @PrePersist@PreUpdate 事件 Hook 执行以下操作:

@Entity
@Table(name = "entities")    
public class Entity {
  ...

  private Date created;
  private Date updated;

  @PrePersist
  protected void onCreate() {
    created = new Date();
  }

  @PreUpdate
  protected void onUpdate() {
    updated = new Date();
  }
}

或者您可以在类上使用@EntityListener注释并将事件代码放置在外部类中。

关于java - Hibernate 和 MySQL 的创建时间戳和上次更新时间戳,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54233212/

相关文章:

java - jparepository 的复杂查询。三张表连接

php - 如何在数据库中获取和存储时间戳

database - Oracle 中表行的创建日期时间是多少?

JavaFX WebView 下载

java - 用于 Java+Playframework 的 UML 建模工具

java - 当并非所有函数都是多态时

java - 关于java Runtime自写公共(public)API兼容性

java - 在 Hibernate 中引用没有属性的外键

java - 在生产中使用 Hibernate "thread" session 上下文

mysql - 如何理解TIMESTAMP之间的减号运算符