Bonjour,

j'ai un petit problème au niveau d'une requête HQL exécutée aussi bien sur une bdd MS SQL SERVER que MySQL (non, un énorme)

via hibernate3, SQL SERVER 2008, MySQL 5.0

SELECT DATEDIFF(o.dateFin, o.dateDebut) FROM MyObjet o WHERE o.dateFin IS NOT NULL AND o.dateDebut IS NOT NULL

quand j'exécute cette requête sur un MySQL aucun problème.

sur un SQLSERVER

Exception in thread "main" java.lang.NullPointerException
at org.hibernate.dialect.Dialect$2.getReturnType(Dialect.java:85)
at org.hibernate.hql.ast.util.SessionFactoryHelper.findFunctionReturnType(SessionFactoryHelper.java:382)
at org.hibernate.hql.ast.tree.AggregateNode.getDataType(AggregateNode.java:21)
at org.hibernate.hql.ast.util.SessionFactoryHelper.findFunctionReturnType(SessionFactoryHelper.java:378)
at org.hibernate.hql.ast.tree.MethodNode.dialectFunction(MethodNode.java:59)
at org.hibernate.hql.ast.tree.MethodNode.resolve(MethodNode.java:47)
at org.hibernate.hql.ast.HqlSqlWalker.processFunction(HqlSqlWalker.java:835)
at org.hibernate.hql.antlr.HqlSqlBaseWalker.functionCall(HqlSqlBaseWalker.java:2328)
at org.hibernate.hql.antlr.HqlSqlBaseWalker.selectExpr(HqlSqlBaseWalker.java:1963)
at org.hibernate.hql.antlr.HqlSqlBaseWalker.selectExprList(HqlSqlBaseWalker.java:1825)
at org.hibernate.hql.antlr.HqlSqlBaseWalker.selectClause(HqlSqlBaseWalker.java:1394)
at org.hibernate.hql.antlr.HqlSqlBaseWalker.query(HqlSqlBaseWalker.java:553)
at org.hibernate.hql.antlr.HqlSqlBaseWalker.selectStatement(HqlSqlBaseWalker.java:281)
at org.hibernate.hql.antlr.HqlSqlBaseWalker.statement(HqlSqlBaseWalker.java:229)
at org.hibernate.hql.ast.QueryTranslatorImpl.analyze(QueryTranslatorImpl.java:228)
at org.hibernate.hql.ast.QueryTranslatorImpl.doCompile(QueryTranslatorImpl.java:160)
at org.hibernate.hql.ast.QueryTranslatorImpl.compile(QueryTranslatorImpl.java:111)
at org.hibernate.engine.query.HQLQueryPlan.<init>(HQLQueryPlan.java:77)
at org.hibernate.engine.query.HQLQueryPlan.<init>(HQLQueryPlan.java:56)
at org.hibernate.engine.query.QueryPlanCache.getHQLQueryPlan(QueryPlanCache.java:72)
at org.hibernate.impl.AbstractSessionImpl.getHQLQueryPlan(AbstractSessionImpl.java:133)
at org.hibernate.impl.AbstractSessionImpl.createQuery(AbstractSessionImpl.java:112)
at org.hibernate.impl.SessionImpl.createQuery(SessionImpl.java:1623)
[...]


quand je cherche la solution sur le net, peu de réponses, mis a part que ça vient du fichier de dialect d'Hibernate pour MS SQL SERVER qui ne gére pas ou mal ce genre de fonctions (la preuve ça marche sur d'autres SGBD). Qu'il faut ou attendre une MAJ qui marche bien ou aller éditer le fichier de dialect et recompiler le tout.

Ne pouvant pas trop faire ça sur le projet actuel, ni trop l'envie, j'aimerai savoir si quelqu'un a déjà rencontré le problème. ou a une solution pour corriger ça en douceur ou pour ne pas utiliser datediff. Juste pour préciser que j'ai déjà testé avec une conversion en timestamp des dates pour recalculer la même chose que datediff et je suis arrivé au même problème.