Причина, по которой столбец даты получает значение null
при вставке, даже если он определен как default SYSDATE
dbms-side, заключается в том, что значение default
для столбца используется только в том случае, если столбцу не присвоено значение в запросе. Это означает, что он не должен появляться в предложении INSERT INTO
, даже если он был дан null
.
Если вы хотите использовать default SYSDATE
на стороне СУБД, вам следует настроить @Column
с помощью _ 8_, чтобы получить столбец из INSERT
s SQL.
@Temporal(TemporalType.TIMESTAMP)
@Column(name = "myDate", insertable=false)
private Date myDate;
Учтите, что этот подход всегда будет игнорировать значение, которое вы предоставляете свойству в своем приложении при создании объекта. Если вы действительно хотите иногда указывать дату, возможно, вам следует рассмотреть возможность использования триггера БД для установки значения вместо значения по умолчанию.
Есть альтернатива использованию default SYSDATE
определения СУБД. Вы можете использовать @PrePersist
и _ 13_ аннотации для назначения текущей даты свойству перед сохранением / обновлением. , если и только если он еще не назначен:
@PrePersist
protected void onCreate() {
if (myDate == null) { myDate = new Date(); }
}
Этот тесно связанный вопрос предлагает разные подходы: Отметка времени создания и отметка времени последнего обновления с Hibernate и MySQL.
person
Xavi López
schedule
05.02.2013