0

我有两列包含日期的实体:

@Entity
@Table
public class Document {
    @DateTimeFormat(pattern = DateUtils.DD_MM_YYYY_HH_MM)
    Generated(value = GenerationTime.INSERT)
    @Column(nullable = false, name = "created_datetime")
    private Timestamp createdDateTime;

    @DateTimeFormat(pattern = DateUtils.DD_MM_YYYY_HH_MM)
    @Generated(value = GenerationTime.ALWAYS)
    @Column(name = "last_updated_datetime")
    private Timestamp lastUpdatedDateTime;

    //....
}

当我保存新的 Document 对象时,数据库中的这两列具有相同的时间。但有时它们的时间不同,大约为 10...200 毫秒。我不明白为什么。

4

1 回答 1

0

当 Hibernate 遇到每个单独的字段时,它会为这些字段生成新的 Timestamp 实例,这可能相隔几微秒。尽管 200 毫秒很多,但这些字段之间会有一些变化并不意外。

如果这是一个需要解决的问题,那么可以执行以下操作之一,而不是使用 @Generated 注释:

  1. 创建一个查找这些字段的 Hibernate 拦截器,如果找到,则将相同的时间戳实例分配给“createdDatetime”和“lastUpdatedDateTime”onSave,或者只为“lastUpdatedDatetime”onFlushDirty 生成一个新的时间戳。见https://docs.jboss.org/hibernate/orm/3.3/reference/en/html/events.html

  2. 与上述类似,使用 JPA 回调 @PrePersist 和 @PreUpdate 而不是 Hibernate 拦截器。请参阅https://docs.jboss.org/hibernate/entitymanager/3.5/reference/en/html/listeners.html

于 2015-03-10T16:15:24.620 回答