Я сталкиваюсь с проблемой с, в спящем режиме и JPA. Мое требование является столбцом CreatedDTTM
и LastUPDATEDDTTM
должен быть заполнен на уровне DB. Я попробовал следующее, но быть бесполезное. Мои столбцы являются набором NOT NULL. Я добираюсь, "не может вставить Пустой указатель в LastUpdatedDttm" исключение. Любое руководство ценится.
@Column(name="LAST_UPDATED_DTTM", insertable=false, updatable=false, columnDefinition="Date default SYSDATE")
@org.hibernate.annotations.Generated(value=GenerationTime.INSERT)
@Temporal(javax.persistence.TemporalType.DATE)
private Date lastUpdDTTM;
@Column(name="CREATED_DTTM”, insertable=false, updatable=false)
@org.hibernate.annotations.Generated(value=GenerationTime.ALWAYS)
@Temporal(javax.persistence.TemporalType.DATE)
private Date createdDTTM;
Не удается воспроизвести. Я протестировал следующую сущность на Derby:
@Entity
public class EntityWithGeneratedField {
@Id
@GeneratedValue
private Long id;
@Column(name = "LAST_UPDATED_DTTM", insertable = false, updatable = false,
columnDefinition = "Date default CURRENT_DATE")
@org.hibernate.annotations.Generated(value = GenerationTime.INSERT)
@Temporal(javax.persistence.TemporalType.DATE)
private Date lastUpdDTTM;
// getters, setters
}
И следующий метод тестирования проходит:
@Test
public void testDateGenerationWhenInsertingEntityWithNullDate() {
EntityWithGeneratedField e = new EntityWithGeneratedField();
session.persist(e);
session.flush();
assertNotNull(e.getId());
assertNotNull(e.getLastUpdDTTM());
}
Ниже, сгенерированный SQL:
Hibernate: insert into EntityWithGeneratedField (id) values (?) Hibernate: select entitywith_.LAST_UPDATED_DTTM as LAST2_83_ from EntityWithGeneratedField entitywith_ where entitywith_.id=?
Все работает как ожидалось.
Мой совет: проверьте DDL вашей таблицы, проверьте, что все работает с необработанным SQL INSERT. Я подозреваю, что проблема на уровне базы данных, а не на уровне Hibernate.