====== Borrar Entidades en Relaciones @ManyToMany ====== El borrado de en tidades en relaciones //@ManyToMany// puede ser complejo de entender. Por lo general, en este tipo de relaciones hay una entidad que es la dominante, se suele indicar en la propiedad //mappedBy//. Si esta entidad se borra, entonces la otra entidad tambien se elimina, además, de los registros de la tabla de unión (//join//). Para el caso en el que las dos entidades tienen el mismo nivel, es decir, pueden existir por si mismas, entonces tenemos que configurarlas de la siguiente manera: @Entity public class Role extends Identifiable { @ManyToMany(cascade ={CascadeType.MERGE, CascadeType.PERSIST, CascadeType.REFRESH}) @JoinTable(name="Role_Permission", joinColumns=@JoinColumn(name="Role_id"), inverseJoinColumns=@JoinColumn(name="Permission_id") ) public List getPermissions() { return permissions; } public void setPermissions(List permissions) { this.permissions = permissions; } } @Entity public class Permission extends Identifiable { @ManyToMany(cascade = {CascadeType.MERGE, CascadeType.PERSIST, CascadeType.REFRESH}) @JoinTable(name="Role_Permission", joinColumns=@JoinColumn(name="Permission_id"), inverseJoinColumns=@JoinColumn(name="Role_id") ) public List getRoles() { return roles; } public void setRoles(List roles) { this.roles = roles; } } De esta menera, solo se borran los registros de la tabla de unión (//join//). Hay que destacar, que el cambio principal esta en la anotación //@JoinTable//. Donde se invierten los valores de las propieades //joinColumns// e //inverseJoinColumns//. ===== Bibliografia y Ejemplos ===== * [[https://stackoverflow.com/questions/1299455/hibernate-manytomany-delete-relation|Hibernate @ManyToMany delete relation]] * [[https://stackoverflow.com/questions/1082095/how-to-remove-entity-with-manytomany-relationship-in-jpa-and-corresponding-join|How to remove entity with ManyToMany relationship in JPA (and corresponding join table rows)?]] * [[https://thoughts-on-java.org/avoid-cascadetype-delete-many-assocations/|Why you should avoid CascadeType.REMOVE for to-many associations and what to do instead]] * [[https://vladmihalcea.com/the-best-way-to-use-the-manytomany-annotation-with-jpa-and-hibernate/|The best way to use the @ManyToMany annotation with JPA and Hibernate - Vlad Mihalcea]] ---- --- //[[juanmiguel.bernal@ticarum.es|JUAN MIGUEL BERNAL GONZALEZ]] 19/06/2019 09:34//