Je dois supprimer des millions de lignes d'une table dans un minuteur EJB. Le problème est que le temporisateur a un délai d'expiration de transaction de 90 secondes, donc je devrais diviser le travail en morceaux de petite taille. Comme je ne sais pas combien de lignes peuvent être supprimées en 90 secondes, l'algorithme devrait être bouclé et supprimé quelques unes à la fois jusqu'à ce que le temps soit presque écoulé.Supprimer un grand nombre de lignes d'une minuterie EJB
Le problème est: Comment le nombre de lignes à supprimer peut-il être limité élégamment dans JPA? La suppression est effectuée sur toutes les lignes ayant un horodatage antérieur à une certaine date.
Je suppose qu'il est possible de trouver la 1000e ligne la plus ancienne et DELETE WHERE timestamp <= {1000th-oldest-row.timestamp}
Ceci, cependant, n'est pas très élégant et je devrais aller à la dernière rangée dans un 1000 pour obtenir l'horodatage. Deuxièmement, le temporisateur devrait se déclencher immédiatement si la table n'est pas propre après les 90 secondes. Cela peut être facilement résolu mais, encore une fois, n'est pas très élégant.
Eh bien, les transactions sont résolues pour moi dans ma contrainte. Mais ta solution est belle. – Hugo
Merci Hugo pour votre commentaire. –