我有两个包含日期的实体:
@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毫秒。我无法理解为什么。
答案 0 :(得分:0)
Hibernate在遇到每个字段时会为这些字段生成新的Timestamp实例,这可能会相隔几微秒。这些字段之间会有一些差异,虽然200毫秒很多,但这并不奇怪。
如果这是一个需要解决的问题,那么可以完成下列任务之一,而不是使用@Generated注释:
创建一个查找这些字段的Hibernate Interceptor,如果找到,则将相同的Timestamp实例分配给'createdDatetime'和'lastUpdatedDateTime'onSave,或者仅为onFlushDirty生成'lastUpdatedDatetime'的新时间戳。请参阅https://docs.jboss.org/hibernate/orm/3.3/reference/en/html/events.html
与上述类似,使用JPA回调@PrePersist和@PreUpdate而不是Hibernate Interceptor。请参阅https://docs.jboss.org/hibernate/entitymanager/3.5/reference/en/html/listeners.html