JPA - Timestamp vacío
Hola a todos,
Primero que nada quiero dar las gracias por permitirme unirme a esta comunidad que me parece un proyecto super interesante.
Acudo a ustedes solicitando ayuda por un problema que me tiene de cabeza.
Me encuentro realizando un proyecto de JPA con MySql.
Mi problema básicamente es que después de sincronizar las entidades a las tablas de mi BD, intento leer el nuevo dato, sin embargo toda la info la obtengo excepto por una fecha que es de tipo TIMESTAMP y que tiene como valor default CURRENT_TIMESTAMP.
He probado utilzar la función flush de EntityManager antes de leer los datos sin resultado.
Nuevamente muchas gracias por su ayuda.
Saludos
Rodrigo
- Inicie sesión o regístrese para enviar comentarios
default
Me suena como que el valor default lo tienes definido en la base de datos pero no en la definición de tu entidad JPA. Entonces cuando creas un nuevo objeto, tiene
null
en esa propiedad y cuando se guarda a base de datos, se le pone NULL en esa columna.El default en base de datos sirve para cuando haces un INSERT sin mencionar esa columna; pero JPA generalmente genera SQL donde menciona todas las columnas y le pasa los valores de las propiedades del objeto que estás insertando; si el objeto tiene null en una propiedad, se guarda NULL en la columna.
Dependiendo qué fecha necesitas en esa columna, puedes simplemente asignarle un
new Date()
en la definición de la variable de instancia en tu clase, o asegurarte que venga una fecha antes de insertar en el método de tu DAO y ponerle una fecha si no tiene una.Hola, gracias por tomar un
Hola, gracias por tomar un poco de tu tiempo para responder mi pregunta.
Cuando termina la transacción el registro si contiene el dato de la fecha actual, pero cuando envio un nuevo request e intento leer esa fila la propiedad de la fecha en mi objeto lo deja como null :S??????
Esto también estaria relacionado con lo que me comentas del tipo por default en mi entidad?????
GRACIAS!!!!
Saludos
Podrías pegar tu POJO para
Podrías pegar tu POJO para ver cómo tienes la definición de las propiedades?
No olvides utilizar los tags de code cuando copias/ pegas el código, por favor
Este es el POJO para la entidad que les comento.
import java.io.Serializable;
import java.util.Date;
import javax.persistence.Basic;
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.persistence.JoinColumn;
import javax.persistence.ManyToOne;
import javax.persistence.NamedQueries;
import javax.persistence.NamedQuery;
import javax.persistence.Table;
import javax.persistence.Temporal;
import javax.persistence.TemporalType;
/**
*
* @author rodrigo
*/
@Entity
@Table(name = "refill_order")
@NamedQueries({
@NamedQuery(name = "RefillOrder.findAll", query = "SELECT r FROM RefillOrder r"),
@NamedQuery(name = "RefillOrder.findById", query = "SELECT r FROM RefillOrder r WHERE r.id = :id"),
@NamedQuery(name = "RefillOrder.findByDateCreated", query = "SELECT r FROM RefillOrder r WHERE r.dateCreated = :dateCreated"),
@NamedQuery(name = "RefillOrder.findByConfirmationNumber", query = "SELECT r FROM RefillOrder r WHERE r.confirmationNumber = :confirmationNumber"),
@NamedQuery(name = "RefillOrder.findByMdn", query = "SELECT r FROM RefillOrder r WHERE r.mdn = :mdn"),
@NamedQuery(name = "RefillOrder.getLastRefillByMdn", query = "SELECT r FROM RefillOrder r WHERE r.id = (SELECT MAX(s.id) FROM RefillOrder s WHERE s.mdn = :mdn)")})
public class RefillOrder implements Serializable {
private static final long serialVersionUID = 1L;
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
@Basic(optional = false)
@Column(name = "id")
private Integer id;
@Basic(optional = false)
@Column(name = "date_created")
@Temporal(TemporalType.TIMESTAMP)
private Date dateCreated;
@Basic(optional = false)
@Column(name = "confirmation_number")
private int confirmationNumber;
@Basic(optional = false)
@Column(name = "mdn")
private String mdn;
@JoinColumn(name = "ps_pinlist_id", referencedColumnName = "id")
@ManyToOne(optional = false)
private PsPinlist psPinlist;
@JoinColumn(name = "rp_pinlist_id", referencedColumnName = "id")
@ManyToOne(optional = false)
private RpPinlist rpPinlist;
public RefillOrder() {
}
public RefillOrder(Integer id) {
this.id = id;
}
public RefillOrder(Integer id, Date dateCreated, int confirmationNumber, String mdn) {
this.id = id;
this.dateCreated = dateCreated;
this.confirmationNumber = confirmationNumber;
this.mdn = mdn;
}
public Integer getId() {
return id;
}
public void setId(Integer id) {
this.id = id;
}
public Date getDateCreated() {
return dateCreated;
}
public void setDateCreated(Date dateCreated) {
this.dateCreated = dateCreated;
}
public int getConfirmationNumber() {
return confirmationNumber;
}
public void setConfirmationNumber(int confirmationNumber) {
this.confirmationNumber = confirmationNumber;
}
public String getMdn() {
return mdn;
}
public void setMdn(String mdn) {
this.mdn = mdn;
}
public PsPinlist getPsPinlist() {
return psPinlist;
}
public void setPsPinlist(PsPinlist psPinlist) {
this.psPinlist = psPinlist;
}
public RpPinlist getRpPinlist() {
return rpPinlist;
}
public void setRpPinlist(RpPinlist rpPinlist) {
this.rpPinlist = rpPinlist;
}
@Override
public int hashCode() {
int hash = 0;
hash += (id != null ? id.hashCode() : 0);
return hash;
}
@Override
public boolean equals(Object object) {
// TODO: Warning - this method won't work in the case the id fields are not set
if (!(object instanceof RefillOrder)) {
return false;
}
RefillOrder other = (RefillOrder) object;
if ((this.id == null && other.id != null) || (this.id != null && !this.id.equals(other.id))) {
return false;
}
return true;
}
@Override
public String toString() {
return "entity.RefillOrder[id=" + id + "]";
}
}
Gracias por su ayuda.
Saludos.