Problème id avec Hibernate

CharlEm80 Messages postés 66 Date d'inscription vendredi 1 septembre 2006 Statut Membre Dernière intervention 1 août 2012 - 13 mai 2009 à 09:57
kirua12 Messages postés 1155 Date d'inscription samedi 17 janvier 2004 Statut Membre Dernière intervention 29 avril 2011 - 15 mai 2009 à 16:26
Bonjour,

J'ai un problème avec Hibernate. En fait je ne fais que charger un fichier formaté dans un table Oracle.

Dans ma table Oracle j'ai une séquence que j'appelle comme ceci dans mon Hibernate :

 <column name="ID" precision="10" scale="0" />
 <generator class="sequence">ATSDEV.PREFEXTRACTION

</generator>

Cette séquence me sert à avoir un numéro d'ID dans ma table.

Le problème c'est qu'a des moments aléatoires (parfois après 100 lignes, parfois après 1200 lignes) le programme s'arrête car je me retrouve avec deux fois le même numéro d'identification (erreur Oracle car l'id est ma pk)

J'ai l'impression qu'Oracle ou Hibernate font que tout d'un coup Oracle essaye de réutiliser des anciens numéros qui avaient été effacés.

Par exemple si ma séquence commence à 100000 et que je fais un Hibernate.Saveobject() je me retrouve avec un id qui est égal à 62091 alors que le max(id) avant début du traitement était de 57337.

Je ne comprend donc pas pourquoi mon id n'a pas été de 100001.
Si c'est Hibernate qui fait ça pourquoi n'a t il pas prit 57338 d'où sort ce 62091 c'est très bizard tout ça non?

Le pire c'est que pendant la lecture du fichier à un moment tout à fait aléatoire (mais toujours le même code et le même fichier input) je vais me retrouver avec des 57338, 57338, ... jusqu'au moment où il va se cracher contre le 62091 qu'il a déjà écrit au début de ce traitement.

Bref je deviens dingue avec ce machin quelqu'un a t il déjà vu ça ?

Merci

1 réponse

kirua12 Messages postés 1155 Date d'inscription samedi 17 janvier 2004 Statut Membre Dernière intervention 29 avril 2011 7
15 mai 2009 à 16:26
Salut,

la définition de l'utilisation d'une séquence pour un champ ressemble plutôt à : @SequenceGenerator(name "SEQ_ID", sequenceName "ma_seq")@GeneratedValue(strategy GenerationType.SEQUENCE, generator "SEQ_ID")

J'ai jamais eu de pb avec les séquences d'oracle ou avec hibernate pour leur gestion.

Ta séquence s'incrémente bien ? Tu as loggé les appels SQL d'hibernate pour voir si il fait l'appel de la séquence ?
0
Rejoignez-nous