Estoy tratando de persistir los campos JodaTime DateTime con JPA a PostgreSQL, pero se encuentran con problemas con punteros nulos a los valores NULL de la base de datos.JodaTime con valores JPA, PostgreSQL y NULL
Estoy trabajando con NetBeans 7 beta 2 IDE. La implementación de persistencia es EclipseLink 2.2.0 y estoy usando un convertidor EclipseLink para que la asignación funcione. Aquí está la declaración de mi campo:
@Converter(
name="dateTimeConverter",
converterClass=ejb.util.DateTimeConverter.class
)
@Column(columnDefinition="TIMESTAMP WITH TIME ZONE")
@Convert("dateTimeConverter")
private DateTime testdate;
La clase convertidor:
public class DateTimeConverter implements Converter {
private Logger log;
private static final long serialVersionUID = 1L;
@Override
public Object convertObjectValueToDataValue(Object o, Session sn) {
if (o == null) {
log.info("convertObjectValueToDataValue returning null");
return null;
}
return ((DateTime)o).toDate();
}
@Override
public Object convertDataValueToObjectValue(Object o, Session sn) {
if (o == null) {
log.info("convertDataValueToObjectValue returning null");
return null;
}
return new DateTime(o);
}
@Override
public boolean isMutable() {
return true;
}
@Override
public void initialize(DatabaseMapping dm, Session sn) {
log = Logger.getLogger("ejb.util.DateTimeConverter");
}
}
Esto funciona bien siempre y cuando hay un conjunto DateTime real. Pero tan pronto como no está configurado, EclipseLink parece asumir un tipo de cadena y postgresql comienza a quejarse de que el valor del carácter de tipo varía. Supongo que esto se debe a que la clase de convertidor devuelve un puntero nulo en lugar de un objeto de fecha y EclipseLink vuelve a tener un valor predeterminado.
¿Hay alguna manera de hacer que esto funcione menos de cambiar a java.util.Date simple?
¿Ha intentado agregar la anotación '@ Temporal' al campo 'dateTime testdate' privado? –
Sí, pero cuando implemento, EclipseLink realmente registra un mensaje que ignorará la anotación @Temporal debido al convertidor. – Eelke