Hibernate Commande SQL direct - Java - Programmation
Marsh Posté le 14-12-2005 à 19:34:08
si c'est hiberante3 que tu utilises, avec ta session tu utilises createSQLQuery("ma requete sql" ) et apres tu appelles la methode executeUpdate() sur l'objet Query que tu venais de creer.
Marsh Posté le 15-12-2005 à 19:42:41
souk a écrit : si c'est hiberante3 que tu utilises, avec ta session tu utilises createSQLQuery("ma requete sql" ) et apres tu appelles la methode executeUpdate() sur l'objet Query que tu venais de creer. |
Bonjour,
J'utilise bien Hibernate 3, mais ma rêquete n'est pas du compliante HQL, c'est juste pour pouvoir passer mes tests plusieurs fois
Lorsque je teste le code que tu m'as donné, j'me prend une QuerySyntaxException avec en inner une NoViableAltException sur ALTER
merci de perdre du temps
Marsh Posté le 15-12-2005 à 19:54:34
Cigue a écrit : Bonjour, |
deja, si tu nous donnes pas la requete que tu fais, et comment, on va pas pouvoir t'aider
Marsh Posté le 15-12-2005 à 19:56:20
souk a écrit : deja, si tu nous donnes pas la requete que tu fais, et comment, on va pas pouvoir t'aider |
ben, la commande c'est :
ALTER TABLE TEST AUTO_INCREMENT = 0
mais ....
Marsh Posté le 15-12-2005 à 20:13:21
et tu veux toujours pas poster le bout de code secret qui genere l'exception, avec eventuellement la stacktrace (tu l'as donnee en partie mais on sait jamais ) ?
Marsh Posté le 15-12-2005 à 21:03:26
Cigue a écrit : Bonjour, |
Récupère la Connection associé à ta Session hibernate et après fais du JDBC.
Marsh Posté le 16-12-2005 à 08:52:27
souk a écrit : et tu veux toujours pas poster le bout de code secret qui genere l'exception, avec eventuellement la stacktrace (tu l'as donnee en partie mais on sait jamais ) ? |
Salut,
le code secret
String queryString = "ALTER TABLE TEST AUTO_INCREMENT = 0 ";
try {
Transaction transaction = this.getSession().beginTransaction();
Query q = this.getS().createQuery(queryString);
q.executeUpdate();
transaction.commit();
}catch (Exception e) {
System.out.println("------------------ AUTO_INCREMENT ------------\n" + e);
e.printStackTrace();
}
l'Exception:
------------------ AUTO_INCREMENT ------------
org.hibernate.hql.ast.QuerySyntaxException: unexpected token: ALTER near line 1, column 1 [ALTER TABLE TEST AUTO_INCREMENT = 0 ]
org.hibernate.hql.ast.QuerySyntaxException: unexpected token: ALTER near line 1, column 1 [ALTER TABLE TEST AUTO_INCREMENT = 0 ]
at org.hibernate.hql.ast.ErrorCounter.throwQueryException(ErrorCounter.java:59)
at org.hibernate.hql.ast.QueryTranslatorImpl.parse(QueryTranslatorImpl.java:242)
at org.hibernate.hql.ast.QueryTranslatorImpl.doCompile(QueryTranslatorImpl.java:153)
at org.hibernate.hql.ast.QueryTranslatorImpl.compile(QueryTranslatorImpl.java:103)
at org.hibernate.impl.SessionFactoryImpl.getQuery(SessionFactoryImpl.java:473)
at org.hibernate.impl.SessionImpl.getQueries(SessionImpl.java:1060)
at org.hibernate.impl.SessionImpl.executeUpdate(SessionImpl.java:1041)
at org.hibernate.impl.QueryImpl.executeUpdate(QueryImpl.java:89)
at net.paycool.test.fw.FacadeTest.InitIncrement(FacadeTest.java:75)
at net.paycool.test.fw.RWWithThread.tearDown(RWWithThread.java:56)
at net.paycool.test.fw.RWWithThread.main(RWWithThread.java:22)
Caused by: line 1:1: unexpected token: ALTER
at org.hibernate.hql.antlr.HqlBaseParser.statement(HqlBaseParser.java:171)
at org.hibernate.hql.ast.QueryTranslatorImpl.parse(QueryTranslatorImpl.java:236)
... 9 more
Marsh Posté le 16-12-2005 à 09:05:08
phnatomass a écrit : Récupère la Connection associé à ta Session hibernate et après fais du JDBC. |
Merci, je ne savais pas que l'on pouvais récupérer la connexion JDBC.
Merci beaucoup, problème résolue
PS: J'suis nouveau sur les forum, doit on indiquer que ma question est résolue
Marsh Posté le 16-12-2005 à 10:05:18
Cigue a écrit : Salut, |
heureusement qu'on t'as dit de faire un createSQLQuery... evidement, createQuery prend en parametre une requete HQL
Marsh Posté le 16-12-2005 à 10:20:52
souk a écrit : heureusement qu'on t'as dit de faire un createSQLQuery... evidement, createQuery prend en parametre une requete HQL |
o bien vue, désolé, mille excuses.
(Avec la connexion JDBC, ça fonctionne mais je préfére cette solution)
J'ai modifié mon code:
String queryString = "ALTER TABLE TEST AUTO_INCREMENT = 0 ";
try {
Transaction t = this.getS().beginTransaction();
Query q = this.getS().createSQLQuery(queryString);
q.executeUpdate();
/*Connection c = this.getS().connection();
PreparedStatement pstmt = c.prepareStatement(queryString);
pstmt.execute();*/
t.commit();
}catch (Exception e) {
System.out.println("------------------ AUTO_INCREMENT ------------\n" + e);
e.printStackTrace();
}
et je prends :
------------------ AUTO_INCREMENT ------------
java.lang.UnsupportedOperationException: Update queries only supported through HQL
java.lang.UnsupportedOperationException: Update queries only supported through HQL
at org.hibernate.impl.AbstractQueryImpl.executeUpdate(AbstractQueryImpl.java:654)
at net.paycool.test.fw.FacadeTest.InitIncrement(FacadeTest.java:80)
at net.paycool.test.fw.FacadeTest.deleteAll(FacadeTest.java:69)
at net.paycool.test.fw.RWWithThread.tearDown(RWWithThread.java:59)
at net.paycool.test.fw.RWWithThread.main(RWWithThread.java:22)
Marsh Posté le 16-12-2005 à 13:12:16
Deja faut pas zapper les rollback ...
Code :
|
Et si tu laissé gerer l'auto incrementation par Hibernate sans toucher la table direct, cad si tu utilise un genrator du style :
Code :
|
Peut etre que tu pourrait la modifier dans tes ordres hql ... (plus portable et plus sur)
Marsh Posté le 16-12-2005 à 13:22:20
Sinon au pire tu peux faire ta propre sequence et la controler toi meme si ca te chante ...
Regarde ici :
http://www.jroller.com/page/jigi/20050907
Marsh Posté le 16-12-2005 à 13:36:48
Chronoklazm a écrit : Deja faut pas zapper les rollback ...
|
Marsh Posté le 14-12-2005 à 16:48:17
Bonjour,
Je souhaiterais executer une commande SQL en passant par hibernate. La commande est du type "ALTER TABLE TEST AUTO_INCREMENT = 0;" (elle permet de remette le curseur de le table TEST à 0 pour rejouer les tests.
merci pour vos réponses.
a+