Herencia
En el caso de herencia, se puede utilizar una serie de anotaciones para indicar cómo se quiere tratar. Se utilizará como ejemplo una serie de clases: Step y sus clases hijas SimpleStep y MultipleStep.
Cuando una serie de objetos comparten herencia, se puede apreciar que, normalmente, no contienen los mismos datos. Es por esto que no se pueden almacenar todas las clases en una misma tabla. Sabiendo esto, hay tres distintas opciones que se pueden utilizar:
1.- Utilizar una tabla única para todas las clases, dejando vacíos los campos que no son propios de la clase de la que se trata. Esto puede producir una gran cantidad de espacio reservado innecesario en muchos casos, pero es viable cuando los atributos de las clases prácticamente no varían. Debe utilizar un discriminador para distinguir la clase de la que se trata en cada registro. El discriminador almacena el nombre de la clase para poder generar un objeto de la clase adecuada cuando se requiera.
2.- Utilizar una tabla para cada clase. En este caso, el espacio reservado siempre será adecuado y se puede distinguir la clase sin necesidad de un discriminador. Por otra parte, puede complicar peticiones como búsquedas conjuntas.
3.- Utilizar una tabla únia para datos comunes y una tabla específica de cada clase para el resto. Es el caso en el que los atributos de la clase padre se comparten y los datos específicos se almacenan en distintas tablas. También requiere un discriminador.
Con estos tres casos se cubren todas las posibilidades, la decisión depende de la naturaleza de los datos de cada clase. Una vez tomada la decisión, la implementación es simple ya que sólo debe añadirse la anotación @Inheritance indicanod la estrategía (por defecto SINGLE_TABLE) y en caso de que sea necesario indicar un nombre para la columna del discriminador mediante la anotación @DiscriminatorColumn.
...
}
Para las clases hijas no es necesario realizar ningún cambio, basta con que estén anotadas como entidades tambén y que hereden de la clase padre como es debido.
No hay comentarios:
Publicar un comentario