seguir - ¿Cómo puedo usar el valor predeterminado del lado de DB mientras uso el guardado de Hibernate?
porque no puedo seguir hashtag en instagram (4)
La razón por la cual la columna de fecha obtiene un valor null
al insertar, aunque se define como default SYSDATE
dbms-side default
, es que el valor default
para una columna solo se usa si la columna no recibe un valor en la consulta. Eso significa que no debe aparecer en la oración INSERT INTO
, incluso si se le ha dado null
.
Si desea utilizar el default SYSDATE
en el lado de DBMS, debe configurar @Column
con insertable=false
para obtener la columna de sus SQL INSERT
s.
@Temporal(TemporalType.TIMESTAMP)
@Column(name = "myDate", insertable=false)
private Date myDate;
Tenga en cuenta que este enfoque siempre ignorará el valor que le proporciona a la propiedad en su aplicación cuando crea la entidad. Si realmente desea poder proporcionar la fecha a veces, tal vez debería considerar usar un activador DB para establecer el valor en lugar de un valor predeterminado.
Existe una alternativa al uso de la definición default SYSDATE
del DBMS. Puede usar las anotaciones @PrePersist
y @PreUpdate
para asignar la fecha actual a la propiedad, antes de guardar / actualizar, si y solo si aún no se ha asignado:
@PrePersist
protected void onCreate() {
if (myDate == null) { myDate = new Date(); }
}
Esta pregunta estrechamente relacionada ofrece diferentes enfoques: fecha y hora de creación y fecha y hora de última actualización con Hibernate y MySQL .
Tengo una columna en DB con valor predeterminado como sysdate
. Estoy buscando una forma de insertar ese valor predeterminado mientras no estoy dando nada a la propiedad correspondiente en el lado de la aplicación. Por cierto, estoy usando una configuración basada en anotaciones.
¿Algún consejo?
O puede inicializar la propiedad del POJO directamente, por ejemplo:
//java code property declaration
private String surname = "default";
Si está utilizando Hibernate, puede usar @CreationTimestamp
para insertar la fecha predeterminada.
@CreationTimestamp
@Temporal(TemporalType.TIMESTAMP)
@Column(name = "create_date")
private Date createDate;
y @UpdateTimestamp
para actualizar el valor si es necesario
@UpdateTimestamp
@Temporal(TemporalType.TIMESTAMP)
@Column(name = "modify_date")
private Date modifyDate;
Solo insertable = falso en tu definición @Column
vea este link para más información