¿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
0 comentarios