Los objetos estructurados son objetos que contienen a su vez a otros objetos (objetos hijo u objetos miembro).
En el caso de objetos estructurados se habla de diferentes niveles de profundidad del objeto. El nivel más alto, nivel 1, será el que corresponde a la definición del objeto estrucutrado (objeto padre), el siguiente nivel, nivel 2, corresponderá a la definición del objeto hijo y así sucesivamente podrá haber un nivel 3, 4... dependiendo de que los objetos hijos a su vez incluyan en su definición a otro u otros objetos miembro.
En el siguiente ejemplo, definimos la clase charla
(objeto estructurado padre) que incorpora a un objeto ponente
(objeto miembro). El nivel más alto de profundidad o nivel 1 es el que corresponde a la definición de charla y el nivel 2 corresponderá a la definición del objeto ponente.
¿Cómo se almacenan, consultan y actualizan los objetos estructurados en Db4o?
- Los objetos estructurados se almacenan asignando valores con
set()
y después persistiendo el objeto constore()
. Al almacenar un objeto estructurado del nivel más alto, se almacenarán de forma implícita todos los objetos hijo. - Las consultas se realizan por cualquiera de los sistemas soportados por el gestor y se podrá ir descendiendo por los diferentes niveles de profundidad.
- La eliminación o borrado de un objeto estructurado se realiza mediante el método
delete()
. Por defecto, no se eliminarán los objetos miembro. Para eliminar objetos estructurados en cascada o de forma recursiva, eliminando los objetos miembro, habrá que configurar de modo apropiado la base de objetos antes de abrirla, mediante el paquetecom.db4o.config
. En el caso de modo embebido, se hará mediante la interfaceEmbeddedConfiguration
. En la nueva configuración se debe indicarcascadeOnDelete(true)
. - La modificación se realizará actualizando los nuevos valores mediante el método set(). Por defecto las modificaciones solo afectan al nivel más alto. Para actualizar de forma recursiva todos los objeto miembro habrá que indicar en la configuración
cascadeOnUpdate(true)
.
Desde el siguiente enlace puedes descargar el proyecto completo que realiza diferentes consultas y actualización de objetos estructurados.
En este otro enlace dispones de un ejemplo con eliminación y modificación de charlas en cascada.