Question

Je suis à l'aide de séquences pour l'enregistrement de domaine instance de l'objet dans ma base de données oracle.J'ai une séquence pour chaque table de la base de données.lorsque j'utilise le sauver de la fonctionnalité de l'Utilisateur ou des Ressources pour exemple, Il a créé une nouvelle ressource sur le premier essai mais l'ID utilisé était de 70 ?la séquence montre le bon numéro suivant - 42 depuis max id dans le tableau 41.pourquoi était-id=70 utilisée pour insérer la nouvelle ressource?

Aussi à partir de la prochaine essayer tous les inserts échouer avec cette erreur

org.springframework.dao.DataIntegrityViolationException: Could not execute JDBC batch update; SQL [insert into GRARESOURCE (decomm
issioned, disabled, criticality, resourceClass, resourceGroupId, resourceName, ownerId, resourceSegmentId, resourceTypeId, riskSco
re, targetIP, id) values (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)]; constraint [GRA.SYS_C0012183]; nested exception is org.hibernate.e
xception.ConstraintViolationException: Could not execute JDBC batch update

Pas sûr de ce qui est mal, parce que ce qui se passe après le code de restructuration ...où nous avons déménagé code dans les nouveaux paquets..

Edit:J'ai trouvé la cause, voir ma réponse..Merci les gars

Était-ce utile?

La solution 4

J'ai réalisé la principale cause du problème. J'avais déjà utilisé le séquencePertablaCledialect, je l'ai eu de l'un des postes précédents de Burt Beckwith. Le dialecte crée une nouvelle séquence pour chaque table lorsque l'application démarre, similaire à la classe de domaine convertie en table. Le dialecte veille également à ce que toutes les séquences d'identification tables soient gérées via sa séquence et une séquence commune n'est pas utilisée pour tous les inserts de la base de données (qui est la stratégie par défaut). Pendant la restructuration du code, j'avais supprimé la dialecte personnalisée et utilisait la dialecte 10G par défaut.

C'est ce qui causait le problème!

Je vois le numéro suivant dans le champ de la valeur suivante de la séquence associée aux tableaux, que, dans lequel je viens savoir que le prochain Val= 42 pour Resource_Suence, qui a raison depuis que Max (ID) dans la table de ressources est de 41.

Merci beaucoup les gars pour la perspicacité qui m'aide en quelque sorte me souvenir de la cause réelle! Pour ceux qui ont besoin d'en savoir plus sur le dialecte personnalisé, Son ici

Autres conseils

Les séquences peuvent gaspiller des numéros, c'est-à-dire que chaque enregistrement d'une table ne sera pas nécessairement un après le prochain sans lacunes.En d'autres termes, le fait que le vôtre a sauté à 70, même si l'enregistrement DB précédent avait ID= 41 n'indique pas un problème.

depuis max id dans la table est de 41

Les séquences de ne pas voir la valeur max de la table et d'obtenir la suivante.Ils stockent l'actuel numéro séquentiel et vous pourrez utiliser la valeur suivante.

Vous pouvez vérifier le nombre réel avec:

select mysequence.currval from dual

Votre problème est avec le GRA.SYS_C0012183 la contrainte.Voir ce qui se vérifie, et si c'est votre clé primaire peut-être vous pouvez utiliser un peu plus lisible le nom, comme MY_TABLE_PK...

Est SYS_C0012183 la contrainte de clé primaire?Se définit-elle pas de tout juste le id colonne (qui est, je suppose, la colonne remplie par la séquence)?

  • Comment voulez-vous déterminer que la valeur suivante de la séquence est de 42?Vous exécutez une requête distincte pour qui?
  • Vous attendez-vous la séquence de vous donner sans jeu de chiffres?Si oui, c'est un problème avec vos attentes.Les séquences de retour de valeurs distinctes, mais ils ne garantissent pas qu'il n'y aura pas de lacunes (en fait, vous pouvez être assuré qu'il y aura des lacunes de la base de données d'arrêter ou de la séquence a été purgé de la piscine commune ou une transaction a été annulée).
  • Comment utilisez-vous la séquence?Est-il un trigger sur la table?Ou Hibernate est configuré pour utiliser la séquence?Si Hibernate est configuré pour utiliser la séquence, le post de cette configuration.
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top