estoy tratando de almacenar nulo valor de un enumerado atributo de una entidad en Java a Oracle base de datos utilizando JPA TopLink. El código se ejecuta sin excepción ni advertencia, pero la entidad no se almacena en la base de datos.¿Es posible almacenar el valor nulo de un atributo enumerado en la base de datos?
La entidad se define como sigue:
@Entity
public class LetterDoc {
...
@Column(name = "delivery_type", columnDefinition = "VARCHAR2(20)", nullable = true)
@Enumerated(EnumType.STRING)
private DocDeliveryTypeEnum deliveryType;
...
}
La clase Enum DocDeliveryTypeEnum tienen valores sólo se requiere.
public enum DocDeliveryTypeEnum {
NORMAL,
RECOMMENDED,
ACKNOWLEDGEMENT
}
En mi situación, tengo casos de entidades en las que el TipoAlbaran hace SENCE y es necesario. Sin embargo, en algunos casos, el tipo de entrega es irrelevante y quiero dejarlo nulo. No quiero establecer un valor predeterminado ya que no hay un valor adecuado para este caso.
La instancia de entidad tiene el valor establecido en nulo, pero cuando intento persistir y purgar la instancia en la base de datos, simplemente no se almacena, aunque la columna se define como VARCHAR2 (20) con el valor NULL habilitado.
La situación es algo como esto:
LetterDoc let = new LetterDoc();
// settery ostatnich atributu
let.setDeliveryType(null);
try {
emptyDocDAO.persist(let);
emptyDocDAO.flush();
} catch (Exception e) {
// no exception is really catched :(
log.error(e);
}
// here I have the id of the entity
Realmente se lanza no es una excepción, mientras que persiste, sólo la entidad no se almacena. Cuando trato de obtener la entidad más tarde en otro hilo por el ID, falla con NoResultException.
¿Hay alguna posibilidad de que esto funcione, o realmente tengo que establecer un valor para todos los atributos enumerados antes de persistir? ¿Realmente tengo que crear un valor predeterminado en la clase Enum?
He resuelto mi problema estableciendo un valor predeterminado que no tiene mucho sentido en la situación particular. Sin embargo, me pregunto si hay alguna otra opción.
Muchas gracias por su experiencia y consejo.
Debería poder guardar nulo en la columna. Muestre el código donde intenta hacerlo y la traza completa de la excepción que obtiene. –
intente esto en su miembro enum: columnDefinition = "char (20) default 'NULL'" – shem
@JBNizet: Realmente no recibo ninguna excepción. Eso es lo que me pregunto más :( – Sharg