J'ai une table qui a des enregistrements qui doivent être périodiquement effacés selon un ensemble de critères.Comment supprimer en bloc des enregistrements dans Grails/GORM?
Je me attendais à ce que je pouvais utiliser le générateur de critères pour supprimer uniquement les enregistrements, mais qui ne parvient parce qu'il n'y a pas de méthode delete
sur des critères ...
def c = Agency.createCriteria()
c.delete
{
eq("agency", "XXX")
}
Je pensais que je première requête pour la définir et puis supprimer que ...
def c = Agency.createCriteria()
def deletions = c
{
eq("agency", "XXX")
}
deletions.delete
Cela échoue également pour la même raison, objet différent.
Alors, quelle est la bonne façon de faire cela? Il semble excessif (pervers) que je devrais itérer à travers l'ensemble des résultats appelant delete()
sur chaque élément.
Je sais que je peux former une requête à exécuter directement en HQL ou en SQL mais cela ne va pas non plus. Le constructeur de critères est-il uniquement destiné à la récupération?
Merci
oui, c'est comme ça que je le fais, mais c'est un peu fou que je ne puisse pas utiliser de critères. DELETE est une partie valide de la sémantique des requêtes et supportée par tous les SGBDR et une chose parfaitement valide, malgré ce que les auteurs d'Hibernate/GORM peuvent penser. Dans mon cas, il serait très mauvais de laisser les enregistrements périmés dans le tableau. – Simon
comme références JesperSM: Maintenant Grails 2+ a un deleteAll() sur DetachedCriteria. –
Cela fonctionne. Dommage cependant qu'il ne cascade pas la suppression des lignes dans les tables enfant. Il donne ensuite une 'violation de la contrainte d'intégrité '. Testé dans '2.3.7'. – Guus