Como poner en BD las foráneas en modo CASCADE con Hibernate
¿Como poner en BD las foráneas en modo CASCADE con Hibernate? Para indicar que una foránea se quiere poner en BD en modo CASCADE hay que usar la siguiente anotación:
@OnDelete(action = OnDeleteAction.CASCADE)
Un ejemplo, en la clase Establecimiento, que tiene un listado de Características, la tabla establecimiento_caracteristicas que tiene como foránea el id_establecimiento. Si queremos que esa foránea sea puesta en la BD como CASCADE hay que poner lo siguiente:
@Entity
@Table(name = "establecimiento")
public class Establecimiento implements java.io.Serializable {
...
private Set<EstablecimientoCaracteristica> establecimientoCaracteristicas = new HashSet<EstablecimientoCaracteristica>(
0);
....
@OnDelete(action = OnDeleteAction.CASCADE)
@OneToMany(fetch = FetchType.LAZY, mappedBy = "establecimiento")
public Set<EstablecimientoCaracteristica> getEstablecimientoCaracteristicas() {
return this.establecimientoCaracteristicas;
}
...
}
Si se le quisiera poner un nombre concreto a esa foránea se podría hacer con la anotación siguiente:
@ForeignKey(name=”FK_ESTABLECIMIENTO”)
Si en vez de como en el ejemplo anterior que es un OneToMany fuera un @ManyToMany aquí hay otro ejemplo, en el que se usa “inverseName” ya que hay que crear 2 foráneas en la tabla de enlace del ManyToMany:
@Entity
public class Woman {
...
@ManyToMany(cascade = {CascadeType.ALL})
@ForeignKey(name = «TO_WOMAN_FK», inverseName = «TO_MAN_FK»)
public Set<Man> getMens() {
return mens;
}
}
alter table Man_Woman add constraint TO_WOMAN_FK foreign key (woman_id) references Woman
alter table Man_Woman add constraint TO_MAN_FK foreign key (man_id) references Man
Conocimiento Open Source
Desde siempre intentamos aplicar la filosofía Open Source también con el conocimiento, por ello nació el Blog Open Source, donde nuestros desarrolladores comparten notas, consejos y tutoriales sobre tecnología y desarrollo, soluciones a problemas diarios, bugs o cualquier información que creemos, puede ser interesante.



0 comentarios