Digamos que tengo dos entidades: Grupo y Usuario. Cada usuario puede ser miembro de muchos grupos y cada grupo puede tener muchos usuarios.¿Cómo eliminar la entidad con la relación ManyToMany en JPA (y las correspondientes filas de la tabla de unión)?
@Entity
public class User {
@ManyToMany
Set<Group> groups;
//...
}
@Entity
public class Group {
@ManyToMany(mappedBy="groups")
Set<User> users;
//...
}
Ahora quiero eliminar un grupo (digamos que tiene muchos miembros).
El problema es que cuando llamo EntityManager.remove() en algún proveedor de grupo, JPA (en mi caso Hibernate) no elimina las filas de tabla de unión y eliminar la operación falla debido a restricciones de clave externa. Llamar a eliminar() en Usuario funciona bien (supongo que esto tiene algo que ver con ser dueño de la relación).
Entonces, ¿cómo puedo eliminar un grupo en este caso?
La única forma en que podría pensar es en cargar a todos los usuarios del grupo, luego, para cada usuario, eliminar el grupo actual de sus grupos y actualizar al usuario. Pero me parece ridículo llamar a update() sobre cada usuario del grupo solo para poder eliminar este grupo.
Thnx! Tuve el mismo problema y tu solución lo resolvió. Pero debo saber si hay otra forma de resolver este problema. Produce un código horrible. ¿Por qué no puede ser _em.remove (entidad) _ y eso es todo? –
¿Está optimizado detrás de escena? porque no quiero consultar todo el conjunto de datos. – Ced
Este es un enfoque realmente malo, ¿qué pasa si tienes varios miles de usuarios en ese grupo? – Serg