2009-08-05 4 views
1

J'utilise EJB3, JBoss AS 4.2.1 et Oracle 10g. La chose est chaque fois que je déploie à l'AS la séquence est cassée. Ex: quand je regarde la séquence de crapaud, sa dernière valeur est 41 mais l'identifiant réel qui est défini pour la nouvelle entrée est 1050. Avez-vous une idée ou un bogue connu à propos de ce problème. Merci.Oracle Broken Sequence

Répondre

1

De mémoire, Oracle met en cache les numéros de séquence pour un accès plus rapide, d'où l'écart. Son comportement attendu.

Vous pouvez exécuter une commande ALTER SEQUENCE pour réinitialiser le compteur à la valeur correcte.

+1

Je dirais que 1050 * est * la "bonne" valeur. Lorsque vous utilisez des séquences et des valeurs de clé générées automatiquement, tout ce qui vous intéresse est que "dites-moi quel ID utiliser est unique pour la nouvelle ligne, c'est tout ce que j'ai besoin de savoir". En d'autres termes, si vous ne vous souciez pas où vous êtes, vous n'êtes jamais perdu. –

0

Merci à tous les deux pour vos réponses. Mon problème a été causé en raison de la allocationSize par défaut de mes entités. La valeur par défaut de l'allocationSize est 50. C'est, je crois, que l'application jboss demande à oracle db chaque 50 création d'entité. La valeur du cache des séquences dans l'oracle est 20. Cela signifie que lorsque j'insère 1000 enregistrements dans la base de données, la séquence augmente sa nextVal 20.