使用Hibernate插入新记录后,两个日期列中的时间不同

时间:2015-02-16 09:58:57

标签: hibernate datetime timestamp generated

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

@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毫秒。我无法理解为什么。

1 个答案:

答案 0 :(得分:0)

Hibernate在遇到每个字段时会为这些字段生成新的Timestamp实例,这可能会相隔几微秒。这些字段之间会有一些差异,虽然200毫秒很多,但这并不奇怪。

如果这是一个需要解决的问题,那么可以完成下列任务之一,而不是使用@Generated注释:

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

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