JPA:数据库生成的列

jpa*_*bie 6 java orm hibernate jpa

我遇到了Hibernate和JPA的问题.我的要求是列CreatedDTTM,LastUPDATEDDTTM应该在数据库级别填充.我试过以下但没有用.我的列设置为NOT NULL.我得到一个"无法将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;
Run Code Online (Sandbox Code Playgroud)

Pas*_*ent 7

无法重现.我在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
}
Run Code Online (Sandbox Code Playgroud)

以下测试方法通过:

@Test
public void testDateGenerationWhenInsertingEntityWithNullDate() {
    EntityWithGeneratedField e = new EntityWithGeneratedField();
    session.persist(e);
    session.flush();
    assertNotNull(e.getId());
    assertNotNull(e.getLastUpdDTTM());
}
Run Code Online (Sandbox Code Playgroud)

下面,生成的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级别.