viernes, 22 de febrero de 2008

Herencia e Hibernate

Para explicarlo bien,vamos a utilizar un ejemplo:
Vamos a utilizar la clase padre Empleado y las subclases Tecnico y Desarrollador.
Para hacer el mapeo de estas relaciones se pueden utilizar 3 formas:

  1. Una sola tabla,donde se guarda la jerarquia de clase.Es la mejor opción ya que sólo hay que acceder a una sola tabla.
  2. Una tabla para la Padre con las cosas comunes y dos tablas para cada hija con las cosas más concretas.Tiene el incoveniente de que para acceder a la información hay que utilizar los join.Pero la ventaja de que se puede crear tablas para cada nuevo tipo,son mas flexibles,ya que si hay que cambiar algún atributo se hace a la tabla correspondiente.
  3. Una tabla independiente para cada clase,pero los atributos de la clase Padre tiene que estar en cada tabla Hija.

A continuación presentamos un ejemplo de uso que vale para cualquiera de las tres estrategias. Con esto se demuestra que podemos cambiar la configuración, pero que la lógica de negocio sigue intacta.

@Test
public void addEmpleado() {
log.info("\n\n*** añadiendo Emppleado ***\n");

try {
Empleado empleado = new Employee("nombre"

session.persist(empleado);

log.debug("La clave del nuevo empleado es: " + empleado.getId());


Tecnico tecnico = new Tecnico();
tecnico.setName("nombre tecnico");
ttecnico.setExperienceYears(24);
session.save(tecnico);
log.debug("La clave del nuevo tecnico es: " + tecnico.getId());



} catch (Exception e) {
log.error(e);
}
}