OrmLite: evita cambios automáticos en la base de datos al agregar o eliminar de una ForeignCollection

Actualmente, estoy usando OrmLite y tengo tres objetos A, B y C. A contiene una ForeignCollection de B, y B contiene una ForeignCollection de C. Cada vez que agrego un elemento a ForeignCollections, se ejecuta instantáneamente una declaración de inserción. Una declaración de eliminación se ejecuta instantáneamente cada vez que elimino un elemento.

Me gustaría agregar/eliminar sin que se ejecuten las declaraciones hasta que cree o actualice A. ¿Es esto posible?

preguntado el 15 de febrero de 14 a las 20:02

1 Respuestas

Me gustaría agregar/eliminar sin que se ejecuten las declaraciones hasta que cree o actualice A. ¿Es esto posible?

No hay manera de hacer esto actualmente. La colección de carga diferida ni siquiera almacena elementos en sí misma, por lo que la idea de almacenar cambios en caché para más tarde no es posible.

Sin embargo, podrías hacer esto por tu cuenta. Puede mantener una lista de elementos en la entidad y luego anular la dao.create(...) y dao.update(...) métodos para llamar collection.addAll(...) si hay elementos almacenados en caché en su colección especial.

private List<Item> foreignItemsToAdd;
...
private void addForeignItem(Item item) {
   if (foreignItemsToAdd == null) {
       foreignItemsToAdd = new ArrayList<Item>();
   }
}

Entonces el dao tendría algo como:

@Override
public int create(ParentItem parent) throws SQLException {
    if (parent.getForeignItemsToAdd() != null) {
        parent.getForeignItems().addAll(parent.getForeignItemsToAdd());
    }
    return super.create(parent);
}

Respondido 16 Feb 14, 15:02

No es la respuesta que estás buscando? Examinar otras preguntas etiquetadas or haz tu propia pregunta.