Herencia en TopLink III Parte
Lamentó por la demora amigos(as)....tantas cosas pero bueno sigamos con el post...
Configurando la Herencia
Configurando la Herencia
Procedemos a configurar primero la clase padre para lo cual debemos configurar su descriptor, lo cual implica conocer cuáles subclases deben instanciarse deacuerdo a algún parámetro. Se puede optar por dos opciones:
- La primera es utilizar campos indicadores en la clase descriptora padre, los cuales pueden ser números o cadenas que no deben mapearse a un atributo de la tabla a menos que sea solo de lectura ya que estos serán los encargados de determinar si una subclase es instanciada o no, para lo que se debe emplear un mecanismo de pareja clave - valor como se muestra en la figura a continuación:
- La otra opción es utilizar un campo indicador con el nombre completo de la clase hija o padre como valor, dependiendo de que necesitemos instanciar, lo cual colocamos en una columna que sirve como campo indicador para saber que subclase se instanciara. Cabe aclarar que este campo indicador es un atributo de la clase padre (Tabla Padre) como se muestra a continuación:
- La última opciónes utilizar métodos de extracción lo cual no abundaremos en este post.
En mi caso utilice la segunda opción a través del campo indicador tipoObjeto el cual me permitirá saber que clase hija debo instanciar. Con este preámbulo en mano comencemos la configuración de la clase Padre.
Configurando la clase Padre (Entidad)
Configurando la clase Padre (Entidad)
Para configurar la clase padre lo primero que debemos hacer es activar la pestaña de Inherence , para lo cual nos colocamos sobre la ventana Structure seleccionamos nuestra clase Entidad y activamos la opción como se muestra en la figura(Lo mismo debemos realizarlo para los clases hijas):
Una vez activada la pestaña de Inherence se debe marcar la opción Is Root Descriptor (si no está activada) para indicar que esta será la clase padre, como voy a utilizar un campo indicador seleccionamos la opción Use Class Indicator Field y elegimos el campo respectivo que en nuestro caso es TipoObjeto quedando la configuración queda de la siguiente manera:
Configurando Clases Hijas
Configurando Clases Hijas
Teniendo ya configurada la clase padre es momento de configurar las clases hijas para lo cual realizamos tanto en la clase Empresa como Persona la activación de la opción Inherence (Como se menciono anteriormente).
En la clase hija tanto Empresa como Persona se tiene que desactivar la opción Is Root Descriptor para asegurar que estás serán tratadas como clases hijas, además se debe colocar el respectivo que es el Parent Descriptordescriptor padre Entidad como se muestra en la figura a continuación:
Luego de esto debemos modificar el campo indicador en la clase padre para que sea solo de lectura, para lo que seleccionamos el atributo tipoObjeto dentro de la clase Entidad en la ventana de Structure y marcamos la opción read only como se muestra en la figura a continuación:
Una vez realizado la configuración de los descriptores se debe modificar las clases hija Empresa y Persona para que extiendan de la clase Entidad lo cual involucra realizar las siguientes acciones:
En la clase hija tanto Empresa como Persona se tiene que desactivar la opción Is Root Descriptor para asegurar que estás serán tratadas como clases hijas, además se debe colocar el respectivo que es el Parent Descriptordescriptor padre Entidad como se muestra en la figura a continuación:
Luego de esto debemos modificar el campo indicador en la clase padre para que sea solo de lectura, para lo que seleccionamos el atributo tipoObjeto dentro de la clase Entidad en la ventana de Structure y marcamos la opción read only como se muestra en la figura a continuación:
Una vez realizado la configuración de los descriptores se debe modificar las clases hija Empresa y Persona para que extiendan de la clase Entidad lo cual involucra realizar las siguientes acciones:
- Todas las clases hijas (Empresa, Persona) deben extender de su clase padre (Entidad).
- El atributo que define la clave primaria en las tablas hijas debe ser omitido o borrado junto con sus métodos de acceso setter y getter, ya que las tablas hijas utilizarán como identificador al identificador del padre.
- Las relaciones de las tablas hijas con las tabla padre ya no son necesarias ya no que devuelven ningún dato (pueden comprobarla y verán que su resultado es objeto nulo) por lo que en mi caso el atributo que define las relaciones con entidad y todo sus referencias fueron comentadas.
- Para terminar se debe aclarar que no es necesario modificar los descriptores de cada clase eliminando o comentando las relaciones y atributos mencionados anteriormente para que funcione( eliminando la relación de entidad en cada clase hija por ejemplo), TopLink los omite. Pero sería conveniente hacerlo para ganar un poco de experiencia en el manejo de estos.