使用hibernate JPA注释设置自动生成时间的困难时间

感谢你们,我对hibernate的知识得到了很大的改善。 现在我在这里打了一个关于current_timestamp的块。 这是我的代码

@Column(name="DATE_CREATED", insertable=false, updatable=false, columnDefinition="timestamp default current_timestamp") @org.hibernate.annotations.Generated(value=GenerationTime.INSERT) @Temporal(javax.persistence.TemporalType.TIMESTAMP) private Date dateCreated; @Column(name="LAST_MODIFIED", insertable=false, updatable=false, columnDefinition="datetime") @org.hibernate.annotations.Generated(value=GenerationTime.ALWAYS) @Temporal(javax.persistence.TemporalType.TIMESTAMP) private Date lastModified; 

我希望date_created获取current_timestamp,我希望lastmodified为每次更新插入时间。显然我不能在同一个表上有2个current_timestamp字段。还有其他方法可以实现吗? 谢谢阅读

这与Hibernate本身无关。 您在上面指定的注释告诉Hibernate这些值将由数据库生成,因此需要在插入/更新实体后重新加载。

如果这是您想要的方式,则需要配置数据库(例如,通过创建触发器)以根据需要填充date_created / last_modified列。

另一种方法是不将这些字段标记为生成,而是在java代码中更新它们。 如果您正在使用JPA(通过Hibernate EntityManager),通过@PrePersist / @PreUpdate回调方法执行此操作相当简单:

 @PreUpdate @PrePersist public void updateTimeStamps() { lastModified = new Date(); if (dateCreated==null) { dateCreated = new Date(); } } 

您可以通过hibernates @CreationTimestamp@UpdateTimestamp注释实现相同的function,例如

 @Column(name = "CREATED") @CreationTimestamp private LocalDateTime created; @Column(name = "LAST_UPDATED") @UpdateTimestamp private LocalDateTime lastUpdated;