Cuando intento hacer una entityManager.remove (instancia) el proveedor JPA subyacente emite una operación de eliminación separada en cada una de las entidades GroupUser. Siento que esto no es correcto desde la perspectiva del rendimiento, ya que si un grupo tiene 1000 usuarios habrá 1001 llamadas emitidas para eliminar el grupo completo y su entidad de usuario de grupo.La operación de eliminación de JPA entitymanager no se realiza
¿Tendría más sentido escribir una consulta con nombre para eliminar todas las entradas en la tabla groupuser (por ejemplo, delete from group_user where group_id =?), Por lo que tendría que hacer solo 2 llamadas para eliminar el grupo.
@Entity
@Table(name = "tbl_group")
public class Group {
@OneToMany(mappedBy = "group", cascade = CascadeType.ALL, fetch = FetchType.LAZY)
@Cascade(value = DELETE_ORPHAN)
private Set<GroupUser> groupUsers = new HashSet<GroupUser>(0);
Es extraño que no pueda confiar en la opción cascade = DELETE según la especificación JPA, ya que borra todas las instancias GroupUser 1 por 1. Esto implica que tengo que escribir código personalizado para optimizar la eliminación de entradas. – Sam
@Samuel. Hice una pregunta muy similar el otro día. Puede encontrarlo aquí: http://stackoverflow.com/questions/2856460/hibernate-doesnt-generate-cascade Y la sugerencia de usar @OnDelete en lugar de cascade podría significar que no elimina las instancias 1 por 1 . Podrías intentarlo. Aunque no lo he probado todavía. –
@Shervin - @OnDelete funciona como un amuleto, de alguna manera se perdió al usarlo. Sugeriría que agregue soporte para esto también para todas las anotaciones de @OneToMany. – Sam