¿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