2015-02-16 1 views
0

У меня есть Entity с двумя колонками, которая содержит дату:разного времени в двух столбцах дат после вставки новой записи с помощью Hibernate

@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

Hibernate генерирует новые экземпляры метки времени для этих полей, поскольку она встречает каждое отдельное поле, которое может случиться с микросекундами. Не случайно, что между этими полями будет какая-то разница, хотя 200 миллисекунд - это много.

Если это вопрос, который должен быть решен, то вместо того, чтобы использовать аннотацию @generated один из следующих может быть сделано:

  1. Создать Hibernate перехватчик, который выглядит для этих полей и, если найдены правопреемников один и тот же экземпляр Timestamp для 'createdDatetime' и 'lastUpdatedDateTime' onSave или генерирует новую временную метку для 'lastUpdatedDatetime' onFlushDirty. См. 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

Смежные вопросы