|
Publicité ' | |||||||||||||||||||||||
|
|
#1 | ||||||
|
Membre à l'essai
![]() Étudiant Inscription : octobre 2012 Messages : 48 ![]() |
Bonjour tout le monde,
Je suis tout nouveau avec hibernate, mon problème c'est que je veux récupérer le max(id) et le retourner voici mon code clientDaoImp.java: Code :
Code :
Et je l'appelle dans la classe ClientAction "id = clientManager.idDao()+1;" , l'erreur qui apparaît est: Code :
MErci |
||||||
|
|
00
|
|
|
#2 |
|
Membre Expert
![]() Formateur JAVA / XML Inscription : novembre 2007 Messages : 849 ![]() |
Utilisateur, avec un grand U, car il s'agit d'une classe.
Cela étant c'est une très mauvaise pratique de récupérer le max id. Pourquoi cherches-tu à faire cela ?
__________________
Moins on code, moins il y a de bug ... et vice-versa ainsi qu'inversement ... |
|
|
00
|
|
|
#3 | |||
|
Membre à l'essai
![]() Étudiant Inscription : octobre 2012 Messages : 48 ![]() |
Citation:
Je réctifie, à la place de "utilisateur" je met client, bon j'ai modifier le c par un C majiscule et ça a ma donné ceci: Code :
|
|||
|
|
00
|
|
|
#4 |
|
Membre Expert
![]() Formateur JAVA / XML Inscription : novembre 2007 Messages : 849 ![]() |
L'auto incrément fonctionne très bien avec Oracle 10g et Hibernate (quelle version), mais il te faut créer une séquence et faire pointer le générateur d'ID sur cette séquence.
Voici un lien qui pourra t'aider : http://blog.lishman.com/2009/02/auto...in-oracle.html sinon pour ton problème "createQuery" ne lance pas la requête il fait juste que la créer. Ca va donc dans un objet de type "Query" ... ton cast est donc incorrect, ce que te dit clairement ton erreur. Exemple : http://www.javabeat.net/2008/07/thre...-in-hibernate/ Ensuite ta query il te faudra la lancer "list" ou "uniqueResult" (dans ton cas) pour obtenir ce que tu attends (et lancer la requête). Enfin, sur le fond, la méthode est mauvaise, car si tu es en mode "application" web (avec plusieurs clients potentiels) il est tout à fait probable que l'ID que tu récupères à un instant T pour en faire un auto-incrément rentre en concurrence avec un autre thread et donc tu auras un problème d'ID. Ne sous-estime pas cette possibilité de concurrence, elle commence à être élevée à partir d'une vingtaine d'utilisateurs.
__________________
Moins on code, moins il y a de bug ... et vice-versa ainsi qu'inversement ... |
|
|
10
|
|
|
#5 | |||
|
Expert Confirmé Sénior
![]() ![]() |
Citation:
Oracle supporte très bien la gestion automatique des id via les sequences et hibernate intègre ça très bien: Code :
__________________
⥀⥁ Чиз faq java, cours java, javadoc. Pensez à et ![]() Laisse entrer le jour après une nuit sombre. Si tu es toujours là, tu n'es pas faite pour mourir. |
|||
|
|
10
|
|
|
#6 | |||
|
Membre à l'essai
![]() Étudiant Inscription : octobre 2012 Messages : 48 ![]() |
Citation:
) @fxrobin Citation:
Code :
Query q = session.createQuery("select max(id) from Client"); Et à propos de: Citation:
Code :
Client c = (Client) session.createQuery("select max(id) from Client").uniqueResult(); |
|||
|
|
00
|
|
|
#7 |
|
Expert Confirmé Sénior
![]() ![]() |
le mot clé autoincrement n'existe que dans mysql il me semble. En oracle comme avec pas mal d'autre DB, on utilise des sequences et de triggers pour assigner les id automatiquement.
Ce serait quand même malheureux de ne pas avoir ce genre de support sur une DB qui se chiffres en dixaines de k€ / an ![]() Si tu ne compte pas insérer autrement que par hibernate, tu utilise les annotations en exemple et tu laisse hibernate créer le shéma. Si tu compte rendre ça automatique aussi en console sql, alors il faut ajouter des triggers. A partir de là deux possibilité trigger systématique, et il faudra au niveau hibernate lui dire d'utiliser le rownum pour récupérer l'id après insertion ou chose que je trouve plus simple: le trigger ne génère que si on a pas explicitement mis d'id, et hibernate configuré pour utiliser explicitement la sequence
__________________
⥀⥁ Чиз faq java, cours java, javadoc. Pensez à et ![]() Laisse entrer le jour après une nuit sombre. Si tu es toujours là, tu n'es pas faite pour mourir. |
|
|
00
|
|
|
#8 | |
|
Membre Expert
![]() Formateur JAVA / XML Inscription : novembre 2007 Messages : 849 ![]() |
Citation:
en plus le type retour n'est pas un Client. Code :
Long id = (Long) (session.createQuery("select max(id) from Client").uniqueResult());
__________________
Moins on code, moins il y a de bug ... et vice-versa ainsi qu'inversement ... |
|
|
|
10
|
|
|
#9 | |
|
Membre à l'essai
![]() Étudiant Inscription : octobre 2012 Messages : 48 ![]() |
Citation:
C'est résolu, merci beaucoup fxrobin! enfait à la place de long j'ai mis un bigDecimal et ça marche maintenant |
|
|
|
00
|
|
|
#10 | ||||
|
Membre à l'essai
![]() Étudiant Inscription : octobre 2012 Messages : 48 ![]() |
Citation:
Citation:
Code :
|
||||
|
|
00
|
|
|
#11 | |
|
Membre Expert
![]() Formateur JAVA / XML Inscription : novembre 2007 Messages : 849 ![]() |
Citation:
__________________
Moins on code, moins il y a de bug ... et vice-versa ainsi qu'inversement ... |
|
|
|
00
|
|
|
#12 | ||
|
Expert Confirmé Sénior
![]() ![]() |
Citation:
http://www.developpez.net/forums/d12...d/#post6988992 Citation:
__________________
⥀⥁ Чиз faq java, cours java, javadoc. Pensez à et ![]() Laisse entrer le jour après une nuit sombre. Si tu es toujours là, tu n'es pas faite pour mourir. |
||
|
|
00
|
|
|
#13 | |||
|
Membre à l'essai
![]() Étudiant Inscription : octobre 2012 Messages : 48 ![]() |
Citation:
Citation:
Citation:
|
|||
|
|
00
|
|
|
#14 | ||||
|
Expert Confirmé Sénior
![]() ![]() |
Bon, voilà le code que j'utilise en général. c'est de l'extraction automatique d'oracle donc c'est inutilement verbeux sur pas mal de choses
Code sql :
Et le mapping hibernate correspondant Code xml :
__________________
⥀⥁ Чиз faq java, cours java, javadoc. Pensez à et ![]() Laisse entrer le jour après une nuit sombre. Si tu es toujours là, tu n'es pas faite pour mourir. |
||||
|
|
10
|
|
|
#15 |
|
Membre à l'essai
![]() Étudiant Inscription : octobre 2012 Messages : 48 ![]() |
|
|
|
00
|
Copyright © 2000-2013 - www.developpez.com