Seleccionar página

Como poner en BD las foráneas en modo CASCADE con Hibernate

por | Abr 29, 2011 | Java, JBoss AS / JBoss EAP / WildFly

¿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

Te puede interesar…

0 comentarios

Enviar un comentario

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *