Lorsque j'essaie de créer un entityManager.remove (instance), le fournisseur JPA sous-jacent émet une opération de suppression distincte sur chaque entité GroupUser. Je pense que ce n'est pas correct du point de vue des performances, car si un groupe compte 1000 utilisateurs, 1001 appels seront émis pour supprimer le groupe entier et l'entité itr groupuser. Cela aurait-il plus de sens d'écrire une requête nommée pour supprimer toutes les entrées de la table groupuser (par exemple supprimer de group_user où group_id =?), Donc je devrais faire seulement 2 appels pour supprimer le groupe.L'opération de suppression d'entitymanager de JPA n'est pas performante
@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);
Il est étrange que je ne suis pas en mesure de compter sur l'option cascade = DELETE selon la spécification JPA, car il supprime toutes les instances GroupUser 1 par 1. Cela implique que je dois écrire du code personnalisé pour optimiser la suppression des entrées. – Sam
@Samuel. J'ai posé une question très similaire l'autre jour. Vous pouvez le trouver ici: http://stackoverflow.com/questions/2856460/hibernate-doesnt-generate-cascade Et le conseil d'utiliser @OnDelete au lieu de cascade pourrait signifier qu'il ne supprime pas les instances 1 par 1 Vous pourriez essayer. Je ne l'ai pas encore essayé cependant. –
@Shervin - @OnDelete fonctionne comme un charme, en quelque sorte manqué de l'utiliser. Je suggère que vous ajoutiez un soutien pour cela aussi pour toutes les annotations @OneToMany. – Sam