Escenario
JPA 2.0
Hibernate 4.2.0
Tenemos la Clase A y Clase B, que representan el mapeo de las entidades: A, B y A_B. En una relación de muchos a muchos.
Implementación
Propietario: Clase B, por no tener mappedBy
Clase A {
...
private List<B> relAB;
...
@ManyToMany(mappedBy = "relBA", fetch = FetchType.LAZY)
public List<B> getRelAB() {
return this.relAB;
}
public void setRelAB(List<B> relAB) {
this.relAB = relAB;
}
...
}
Clase B {
...
private List<A> relBA;
...
@ManyToMany(fetch = FetchType.LAZY, cascade = { CascadeType.DETACH, CascadeType.MERGE, CascadeType.PERSIST, CascadeType.REFRESH })
@JoinTable(name = "A_B", joinColumns = { @JoinColumn(name = "idB") }, inverseJoinColumns = { @JoinColumn(name = "idA") })
public List<A> getRelBA() {
return this.relBA;
}
public void setRelBA(List<A> relBA) {
this.relBA = relBA;
}
...
}
Al colocar en el mapeo de la entidad cascade = { CascadeType.DETACH, CascadeType.MERGE, CascadeType.PERSIST, CascadeType.REFRESH }, le decimos al Hibernate que cuando sea llamado cualquiera de los tipos de cascade definidos (excepto REMOVE) no se eliminara los registros contenidos en la entidad A. Asimismo se realizaran el resto de las operaciones segun como corresponda (insert y update en las entidades A, B y A_B, el delete solo se efectuara en B y A_B)
No hay comentarios.:
Publicar un comentario