Tema

Páginas: 27 (6704 palabras) Publicado: 27 de noviembre de 2012
3.6 Conceptos Avanzados de Hibernate

Introducción
 

En este apartado se cubren los siguientes aspectos
 
 
 
 
 
 
 
 
 

 

Relaciones Muchos-a-Muchos
Herencia de entidades
Opcionalidad en las relaciones
Tipos de caché en Hibernate
Más sobre HQL
Optimizaciones de navegación entre entidades
Gestión de referencias
Persistencia transitiva
Patrón “Open Sessionin View”

Para ilustrar estos aspectos se utiliza como ejemplo
la capa modelo de una aplicación de recursos
humanos ficticia

Entidades
Project

-  Las relaciones “a Muchos” se han
modelado con java.util.Set
(semántica: no orden predefinido y
no duplicados).
-  Se supone que el número de
empleados de un departamento es
moderado y que el número de
proyectos en los que trabaja unempleado también.

-  projectId : Long
-  name : String
-  startDate : Calendar
-  endDate : Calendar
-  version : long
0..n
0..n
Employee
-  employeeId : Long
-  firstName : String
-  lastName : String
-  position : String
-  salary : int
-  version : long

DistinguishedEmployee
-  mentionDate : Calendar
-  comment : String

Dirigido por
0..1
0..n

0..1
0..1Department
-  departmentId : Long
-  name : String
-  creationDate : Calendar
-  version : long

Estructura de paquetes (1)
es.udc.pojo.advhibernatetut
demo
model
department
hrservice
employee
project
util

test
model

Estructura de paquetes (y 2)
 

Además de las entidades, el ejemplo incluye
 

Un servicio (subpaquete hrservice) con operaciones para
 
 

 
 

  

Crear departamentos, empleados y proyectos
Hacer asignaciones (director de un departamento y empleado a
un proyecto)
Realizar consultas
Realizar borrados en masa

Un sencillo cliente Web de prueba (subpaquete demo)
Dos casos de prueba (subpaquete test) para el servicio del
modelo

Tablas
(PK)

(FK)

depId

dirId

name

creationDate

version

Tabla = DepartmentRelación “Department(0..1)--[Dirigido por]-->Employee(0..1)”

(PK)

(FK)

empId

depId

Relación “Department(0..1)Employee(0..N)”
firstName

lastName

position

salary

version

Tabla = Employee

Herencia entre Employee y DistinguishedEmployee
empId

prjId

comment

Tabla = DSTEmployee

(PK, FK)

(PK, FK)
empId

mentionDate

Tabla = EmpPrj

(PK, FK)
Relación“Employee(0..N)Project(0..N)”
(PK)
prjId

name

startDate

endDate

version

Tabla = Project

Relación “Employee(0..N)Project(0..N)” (1)
 

En Project

@Entity
public class Project {
// ...
@ManyToMany
@JoinTable(name = "EmpPrj", joinColumns = @JoinColumn(name = "prjId"),
inverseJoinColumns = @JoinColumn(name = "empId"))
public Set getEmployees() {
return employees;
}
publicvoid setEmployees(Set employees) {
this.employees = employees;
}
// ...
}

Relación “Employee(0..N)Project(0..N)” (2)
 

En Employee

@Entity
public class Employee {
// ...
@ManyToMany(mappedBy="employees")
public Set getProjects() {
return projects;
}
public void setProjects(Set projects) {
this.projects = projects;
}
// ...
}

Relación “Employee(0..N)Project(0..N)”(3)
 

Relaciones Muchos-a-Muchos
 

Se utiliza @ManyToMany sobre los campos/propiedades que
definen la relación
 

 

 

 

Si la relación es unidireccional, el lado propietario es el que
permite navegar hacia el otro
Si la relación es bidireccional, se puede elegir cualquier lado
como propietario (y el otro será el lado inverso)

En el ejemplo, la relación esbidireccional y se ha elegido
Project como lado propietario
En Employee (lado inverso)
 

@ManyToMany(mappedBy="employees") sobre
getProjects

Relación “Employee(0..N)Project(0..N)” (y 4)
 

Relaciones Muchos-a-Muchos (cont)
 

En Project (lado propietario), además de @ManyToMany,
se utiliza @JoinTable sobre getEmployees
 
 

 

name: nombre de la tabla en la que se mapea...
Leer documento completo

Regístrate para leer el documento completo.

Estos documentos también te pueden resultar útiles

  • Temas
  • Temas
  • No Temas
  • Temas
  • Temas
  • Tema
  • Temas
  • Temas

Conviértase en miembro formal de Buenas Tareas

INSCRÍBETE - ES GRATIS