Guardando colecciones de niños con OrmLite en Android con objetos creados de Jackson

Tengo un servicio REST al que estoy llamando desde mi aplicación, que tira de un objeto JSON como un byte[] que luego se convierte en una bonita colección anidada de objetos – todo eso funciona bien. Lo que entonces quiero hacer es persistir estos objetos en el almacenamiento de SQLite usando OrmLite, y ahí es donde las cosas empiezan a descomponerse, porque como yo entiendo, OrmLite no persiste automáticamente los objetos anidados.

Para simplificar, vamos a despojar mi funcionalidad real y dejar que mis objetos sean modelados simplemente como sigue:

 @DatabaseTable(tableName = "parents") public class Parent { @DatabaseField(id=true) private String name; @ForeignCollectionField // have to use Collection here because needs to be compatible with Jackson private Collection<Child> children; /* Getters and setters go here */ } @DatabaseTable(tableName = "children") public class Child { @DatabaseField(id=true) private String name; @DatabaseField(foreign=true) private Parent parent; /* Getters and setters go here */ } 

Lo que sucede es que al agregar la creación de un nuevo objeto Parent en la base de datos con mi objeto parentDao correspondiente, los niños no se persistirán junto con el padre.

Esta es una pregunta común y se ha planteado antes, sin duda hay otras preguntas sobre SO que son muy similares a este, sobre todo " Guardar objetos anidados nicho con ORMLite en Android " en respuesta a lo que Gray sugiere la creación del objeto hijo antes de la Padre que trabajaría muy bien para crear mis POJOs manualmente.

Sin embargo, todavía no he visto una respuesta que los factores en los casos en que los objetos están siendo generados por otra biblioteca (en este caso Jackson). Sin profundizar en las entrañas de deserialización de Jackson (que elimina todo el beneficio de su simplicidad) e intentar que Jackson cree los objetos secundarios y luego los agregue a los padres (a menos que me falte algo y esto es más fácil de lo que parece). Que no parece ser una solución particularmente atractiva en este caso particular.

Igualmente, existen otras soluciones que implican añadir anotaciones adicionales a la clave externa que parecen ser adecuadas para trabajar con objetos de un solo hijo, pero esas anotaciones no están disponibles cuando se trabaja con @ForeignCollectionField y sus Collection correspondientes.

Es posible que desee probar usar una ForeignCollection en lugar de una colección en su clase padre.

De la ORMLite-Documentación:

"Las colecciones extranjeras admiten los métodos add () y remove (), en cuyo caso los objetos se agregarán o eliminarán de la lista interna si la colección está ansiosa, y las llamadas DAO se harán para afectar también a la tabla [child] Para las colecciones ávidas y perezosas. "

( http://ormlite.com/javadoc/ormlite-core/doc-files/ormlite_2.html#Foreign-Collection )

En la documentación de la clase en sí también indica que el add / remove se reenvía a la base de datos. ( http://ormlite.com/javadoc/ormlite-core/com/j256/ormlite/dao/ForeignCollection.html#add(T) )

Nunca he trabajado con esto, así que sólo espero que la documentación sea correcta y esto le ayuda a resolver su problema. Todos los derechos reservados

  • ¿Soporte de ormlite por lotes crear y actualizar, eliminar
  • Configuración de ejecución de Android Studio para la generación de configuración de ORMLite
  • Problemas con ORMLite y colecciones perezosas
  • Importar android.os.CancellationSignal no se puede resolver ORMLite en Android
  • Ormlite Android inserciones masivas
  • Android ORMLite crear objeto lento
  • "Ya añadido" excepción con ormlite y gradle
  • Archivo de configuración de Android Studio ORMLite - No se pudo encontrar el directorio de Raw
  • Ordenar por atributo de entidad extranjera en ORMLite
  • Calendario .YEAR, .MONTH, DAY_OF_MONTH diferente de date.getDay () etc?
  • Android ormlite NoClassDefFoundError en Samsung S4 API 21
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.