我遇到了 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;
最佳答案
无法重现。我在 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 级别的问题。
关于java - JPA:数据库生成的列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2779381/