Quelle est la meilleure façon de supprimer toutes les lignes d'un tableau dans Hibernate?
Si j'itère une collection et appelle session.delete()
, cela ne fonctionne pas à ma connaissance.
Si j'utilise une autre option session.createQuery("delete ...")
cela n'affecte pas le contexte de persistance.
Quand devrais-je utiliser ces méthodes s'il n'y a pas de meilleure variante?
DELETE FROM enityName
Le problème réside dans le fait que la mise en veille prolongée gère les cascades en interne, plutôt que de laisser cela à la base de données. Ainsi, l'envoi d'une requête ne déclenchera pas les cascades internes, vous aurez donc des incohérences/orphelins.
Si les performances sont si cruciales (après tout, ce n'est pas tous les jours que l'on tronque une table), vous pouvez avoir plus de 1 suppression HQL pour chaque cascade - c'est-à-dire gérer les cascades manuellement.
Vous pouvez utiliser HQL pour tronquer la table
public int hqlTruncate(String myTable){
String hql = String.format("delete from %s",myTable);
Query query = session.createQuery(hql)
return query.executeUpdate();
}
String stringQuery = "DELETE FROM tablename";
Query query = session.createQuery(stringQuery);
query.executeUpdate();