J'ai une des entités JPA comme celui-ci:cascade Supprimer accroche dans JPA quand un grand nombre d'objets
@Entity
class MyEntity{
@JsonIgnore
@OneToMany(mappedBy = "application", cascade = ALL, fetch = LAZY)
private List<MyChildEnity> myChildEntities;
}
...
@Entity
class MyChildEnity {
@ManyToOne(optional = false, fetch = FetchType.LAZY, cascade = { REFRESH,
DETACH })
@JoinColumn(name = "APPLICATION_ID")
private MyEntity application;
}
-je accéder à cette entité d'un appel REST. Lorsque le nombre d'éléments est très important et que j'essaie de supprimer l'objet MyEntity, l'appel REST se bloque puis expire. Pour un petit nombre d'éléments dans la table MyChildEnity, cela fonctionne correctement. Quand j'ai débogué, j'ai vu que JPA récupère un enregistrement à la fois et le supprime. C'est trop lent et trop de travail fait.
Est-ce un comportement normal? JPA ne devrait pas être intelligent pour convertir cela en un seul appel DELETE sur la table MyChildEnity. J'utilise OpenJPA avec Derby et base de données DB2.
Suggérez de publier le code SQL invoqué et de déterminer à quoi chacun correspond. par exemple 1 SQL pour retirer les éléments de la Liste, puis 1 SQL pour retirer d'autres champs de l'enfant ??? Si oui, quels champs? –
Oui ... D'abord il y a un SELECT pour obtenir tous les éléments et ensuite un appel DELETE pour chaque entrée dans cette liste –