Bonjour,
pour mon application, j'ai bati une requête en SQL pur à la main, puisque je voulais la tester avant de mettre ca sous Hibernate et je suis plus à l'aise de travailler avec du SQL qu'avec Hibernate. Le point est, ma requête fonctionne à merveille mon serveur SQL, mais elle plante allégrement sous Hibernate...donnant ceci dans le stack trace:
[java] Exception in thread "main" net.sf.hibernate.QueryException: outer or full join must be followed by path expression [SELECT count(*) FROM com.mx.releasemgr.domain.Task tk JOIN com.mx.releasemgr.domain.ProjectChange pc ON tk.projectChangeId=pc.projectChangeId WHERE pc.number='relmgr']
[java] at net.sf.hibernate.hql.FromParser.token(FromParser.java:166)
[java] at net.sf.hibernate.hql.ClauseParser.token(ClauseParser.java:87)
[java] at net.sf.hibernate.hql.PreprocessingParser.token(PreprocessingParser.java:123)
[java] at net.sf.hibernate.hql.ParserHelper.parse(ParserHelper.java:29)
[java] at net.sf.hibernate.hql.QueryTranslator.compile(QueryTranslator.java:149)
[java] at net.sf.hibernate.hql.QueryTranslator.compile(QueryTranslator.java:138)
[java] at net.sf.hibernate.impl.SessionFactoryImpl.getQuery(SessionFactoryImpl.java:293)
[java] at net.sf.hibernate.impl.SessionImpl.getQueries(SessionImpl.java:1530)
[java] at net.sf.hibernate.impl.SessionImpl.find(SessionImpl.java:1501)
[java] at net.sf.hibernate.impl.SessionImpl.find(SessionImpl.java:1491)
[java] at net.sf.hibernate.impl.SessionImpl.find(SessionImpl.java:1483)
[java] at com.mx.releasemgr.bootstrap.UpdateDataSynchronization.main(UpdateDataSynchronization.java:307)
[java] Java Result: 1
Ma requete sous SQL:
Ma requete sous Hibernate:SELECT count(*) FROM task tk JOIN project_change pc ON tk.project_change_id=pc.project_change_id WHERE pc.number='relmgr'
La requête est identique la, juste la synthaxe qui change... je dois faire une faute dans la synthaxe...surement autour du "JOIN" je crois...String query = "SELECT count(*) FROM com.mx.releasemgr.domain.Task tk JOIN com.mx.releasemgr.domain.ProjectChange pc ON tk.projectChangeId=pc.projectChangeId WHERE pc.number='relmgr'";
System.out.println(query);
int count = ((Integer) session.find(query).get(0)).intValue();
Merci de m'aider![]()
Si le besoin est, je peux mettre la définition de mes tables, mais je ne crois pas que ce soit nécéssaire...
++
Partager