JPA: столбцы Database Generated

Я сталкиваюсь с проблемой с, в спящем режиме и 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;
6
задан Pascal Thivent 6 May 2010 в 08:30
поделиться

1 ответ

Не удается воспроизвести. Я протестировал следующую сущность на 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.

7
ответ дан 17 December 2019 в 00:05
поделиться
Другие вопросы по тегам:

Похожие вопросы: