Un tipo de propiedad que encontramos comunmente en nuestros objetos es el tipo Boolean. Puede ser para describir si un registro esta activo o no, o para marcar una tarea como realizada, etc. En una base de datos no es común encontrar este tipo de dato para una columna. Normalmente lo representamos mediante un Number(‘0’ o ‘1’) o un Char (‘S’ o ‘N’). En nuestro caso utilizamos el Char.
Al utilizar Datanucleus con JDO para mapear la siguiente clase
@PersistenceCapable(table="TC_EMPLEADOS") public class Empleado { @PrimaryKey @Persistent(column="NID") Integer id; @Persistent(column="SNOMBRE") String nombre; @Persistent(column="BACTIVO") Boolean activo; public Empleado() { } }
me arrojaba un error parecido al siguiente:
NucleusDatastoreException: Fail to convert to internal representation
El problema es que, por default, Datanucleus trata de mapear la propiedad «activo» a un valor númerico (‘0’ o ‘1’). Para mapear la propiedad a una cadena podemos hacer lo siguiente:
@PersistenceCapable(table="TC_EMPLEADOS") public class Empleado { @PrimaryKey @Persistent(column="NID") Integer id; @Persistent(column="SNOMBRE") String nombre; @Persistent(column="BACTIVO") String activo; public Empleado() { } public Boolean getActiv0() { return "S".equals(activo); } public void setActivo(Boolean activo) { this.activo = activo?"S":"N"; } }
Notesé que utilizamos el tipo String para la propiedad y Boolean para los métodos de acceso a la propiedad.
Fuentes:
http://turbomanage.wordpress.com/2009/12/04/persisting-enums-with-appengine-datastore/