2008-12-02 13 views
6

Tengo una clase que actualmente está asignada como una entidad en una tabla de base de datos utilizando Hibernate. Esta clase debe refactorizarse en una clase abstracta que contenga algún campo común a todas sus subclases.Refactorización de una entidad Hibernate en las subclases

Estoy usando anotaciones para mapear entidades de hibernación/clases de relaciones.

Me gustaría sugerencias/variantes sobre cómo hacer esta refactorización.

También, algunas sugerencias sobre cómo mover los datos que se almacenan en la base de datos (para la futura superclase abstracta) en una de las subclases concretas.

Respuesta

9

Primero, crearé la superclase y agregaré las anotaciones necesarias. Usted tiene que decidir entre:

  • estrategia de tabla por clase
  • Tabla individual por Clase Estrategia Jerarquía
  • Ingresó Estrategia Subclase

Creo que la Subclase Usuario funcionará aquí. Agregue la anotación:

@Entity 
@Inheritance(strategy=InheritanceType.JOINED) 

A la superclase.

En segundo lugar, crearé la (s) tabla (s) que representan las clases secundarias. Recuerde que estas solo tendrán las columnas que son exclusivas de la subclase, las columnas que se comparten permanecerán en la superclase. Luego seleccione las filas de la tabla de superclase que pertenecen a cada subclase y mueva los datos.

No estoy seguro de si está buscando algo más específico? Este article explica la herencia con Hibernate.

+0

El enlace parece estar roto. Para la documentación de JBoss: http://docs.jboss.org/hibernate/stable/annotations/reference/en/html_single/#d0e1168 – rpr

+0

Creo que lo único que falta para esta respuesta es la mención de la cuarta opción de '@MappedSuperclass ', como se ve en 2.2.4.4. del documento vinculado – Draken

Cuestiones relacionadas