2010-05-06 28 views
6

Tengo un problema con Hibernate y JPA. Mi requisito es la columna CreatedDTTM y LastUPDATEDDTTM deben rellenarse en el nivel DB. He intentado seguir pero no uso. Mis columnas están establecidas NOT NULL. Aparece una excepción "no se puede insertar nulo en LastUpdatedDttm". Cualquier orientación es apreciada.JPA: columnas generadas en la base de datos

@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; 

Respuesta

7

No se puede reproducir. He probado la siguiente entidad en 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 
} 

y pasa a la siguiente método de prueba:

A continuación, el SQL generado:

 
Hibernate: insert into EntityWithGeneratedField (id) values (?) 
Hibernate: select entitywith_.LAST_UPDATED_DTTM as LAST2_83_ from EntityWithGeneratedField entitywith_ where entitywith_.id=? 

Todo está funcionando como se esperaba.

Mi consejo: compruebe el DDL de su tabla, compruebe que las cosas sí funcionan con SQL INSERT sin formato. Sospecho que hay un problema en el nivel de la base de datos, no en el nivel de Hibernate.

+0

Gracias por responder. Tenías razón, no había establecido el SISTEMA POR DEFECTO en el nivel de DDL. Pero ahora me he topado con otro problema. He configurado UPDATABLE = true para LastUPdatedDttm pero todavía no forma parte de las declaraciones de actualización generadas por hibernate. Necesito que LastUpdateDDttm se actualice mediante SYSDATE siempre que se actualice la actualización. – jpanewbie

+0

@jpanewbie ¿Podría publicar esto como una pregunta separada? Es una buena práctica no mezclar problemas en una sola pregunta. Gracias. –

+0

hecho. ¿Puedes ayudar ahora? – jpanewbie

Cuestiones relacionadas