Je développe une application utilisant Oracle 11g, Java (Struts2) et Hibernate.Problème du générateur de séquence Oracle hibernate
J'ai une table nommée mytemp avec la colonne mytemp_id qui est de type NUMBER (22,0).
Dans mon id fichier mytemp.hbm.xml est telle qu'indiquée ci-dessous
<id name="mytempId" type="big_decimal">
<column name="MYTEMP_ID" precision="22" scale="0" />
<generator class="sequence">
<param name="sequence">MYTEMP_TEMP_ID_SEQ</param>
</generator>
</id>
Dans ma séquence de base de données Oracle nommée « MYTEMP_TEMP_ID_SEQ » est créé et fonctionne bien dans Oracle.
Maintenant, lorsque je tente d'insérer l'enregistrement à l'aide mise en veille prolongée, il me donne l'erreur suivante
org.hibernate.id.IdentifierGenerationException: ce générateur id génère long, entier, à court ou chaîne
Il semble en tant que ma séquence renvoie Number, hibenate en la considérant comme BigDecimal, tandis que la classe de générateur de séquençage d'hibernate considère les valeurs qui sont longues, entières, courtes et string uniquement.
Hibernate ne devrait pas avoir de problème avec BigDecimal. Mais je pense qu'ils n'ont pas implémenté BigDecimal pour le générateur de séquence
Quelqu'un peut-il m'aider à résoudre le problème?
Merci.
Bonjour ChssPly76, Merci pour votre réponse. J'ai converti mon hibernation pour l'utiliser longtemps partout où BigDecimal utilise une séquence en hibernation. Cela résout mon problème. Je l'ai posté ici pour savoir comment puis-je étendre la classe hibernate identifiergenerator pour utiliser bigDecimal pour le générateur de séquences. Je ne comprends pas exactement. Mais la conversion de BigDecimal à long résout problème à coup sûr. Merci. – amar4kintu
J'ai expliqué comment étendre 'SequenceGenerator' dans ma réponse ci-dessus. Jetez un coup d'oeil à sa méthode 'generate()' - vous copieriez tout le contenu et remplaceriez 'IdentifierGeneratorFactory.get()' par 'resultSet.get()' pour obtenir votre valeur 'BigDecimal'. – ChssPly76
J'ai réglé tous mes champs big_decimal pour qu'ils soient considérés comme longs dans mon fichier de génération d'hibernation .. donc ça marche bien maintenant .. merci .. pour votre soutien .. – amar4kintu