我用下面给出的HQL查询:意想不到的AST节点
select A.id.customerName,
A.id.customerId,
A.id.IZone,
B.id.accountType,
B.id.accountNumber,
B.id.bankBranch,
(DAYS(current_date)-DAYS(B.id.enrolledDate)) -
(select count(distinct C.id.DWkhol) from Holiday C
where C.id.ICo='01' and
C.id.DWkhol between B.id.enrolledDate and current_date)
from Profile A, Account B
where B.id.accountNumber != ' ' and
A.id.customerId= B.id.customerId;
相同的查询工作在SQL开发人员罚款,我能够看到的值。 但我收到expections当我通过我的java类调用这个查询:
[17年3月16日21:02:29:624 EDT] 00000027 SystemOutØ406868 [Web容器:1] ERROR组织。 hibernate.hql.PARSER - :0:0: 意外的AST节点:查询[3/16/17 21:02:29:626 EDT] 00000027 SystemOut O 406868 [WebContainer:1] DEBUG org.hibernate.hql。 ast.ErrorCounter - :0:0:意外的AST节点: 查询:0:0:意外的AST节点:在 处查询org.hibernate.hql.antlr.HqlSqlBaseWalker.expr(HqlSqlBaseWalker.java:1312) at org。 hibernate.hql.antlr.HqlSqlBaseWalker.arithmetic EXPR(HqlSqlBaseWalker.java:2749) 在 org.hibernate.hql.antlr.HqlSqlBaseWalker.selectExpr(HqlSqlBaseWalker.java:2006) 在 org.hibernate.hql.antlr.HqlSqlBaseWalker.selectExprList(HqlSqlBaseWalker.java:1825) 在 org.hibernate.hql.antlr.HqlSqlBaseWalker.selectClause(HqlSqlBaseWalker.java:1394) 在 org.hibernate.hql.antlr.HqlSqlBaseWalker.query(HqlSqlBaseWalker.java:553) 在 org.hibernate.hql .antlr.HqlSqlBaseWalker.selectStatement(HqlSqlBaseWalker.java:281) 在 org.hibernate.hql.antlr.HqlSqlBaseWalker.statement(HqlSqlBaseWalker.java:229) 在 org.hiber nate.hql.ast.QueryTranslatorImpl.analyze(QueryTranslatorImpl.java:251) 在 org.hibernate.hql.ast.QueryTranslatorImpl.doCompile(QueryTranslatorImpl.java:183) 在 org.hibernate.hql.ast.QueryTranslatorImpl。编译(QueryTranslatorImpl.java:13 [3/16/17 21:02:29:626 EDT] 00000027 SystemOut O 406870 [WebContainer:1] ERROR org.hibernate.hql.PARSER - right-hand 二进制的操作数运算符为null [3/16/17 21:02:29:627 EDT] 00000027 SystemOut O 406870 [WebContainer:1]调试 org.hibernate.hql.ast.ErrorCounter - 二进制 运算符的右侧操作数是零二元运算符的空右操作数为空 在 org.hibernate.hql.ast.tree.BinaryArithmeticOperatorNode.initialize(BinaryArithmeticOperatorNode.java:48) 在 org.hibernate.hql.ast.HqlSqlWalker.prepareArithmeticOperator(HqlSqlWalker.java:1033) 在 org.hibernate.hql。 antlr.HqlSqlBaseWalker.arithmeticExpr(HqlSqlBaseWalker.java:2756) 在 org.hibernate.hql.antlr.HqlSqlBaseWalker.selectExpr(HqlSqlBaseWalker.java:2006) 在 org.hibernate.hql.antlr.HqlSqlBaseWalker.selectExprList(HqlSqlBaseWalker。的java:1825) 在 org.hibernate.hql.antlr.HqlSqlBaseWalker.selectClause(HqlSqlBaseWalker.java:1394) 在 org.hibernate.hql.antlr.HqlSqlBaseWalker.query(HqlSqlBaseWalker.java:553 ) 在 org.hibernate.hql.antlr.HqlSqlBaseWalker.selectStatement(HqlSqlBaseWalker.java:281) 在 org.hibernate.hql.antlr.HqlSqlBaseWalker.statement(HqlSqlBaseWalker.java:229) 在 org.hibernate作为。 hql.ast.QueryTranslatorImpl.analyze(QueryTranslatorImpl.java:251) at org.hibernate.hql.ast.QueryTranslatorImpl。doCompile(QueryTranslatorImpl.java:183) 在 org.hibernate.hql.ast.QueryTranslatorImpl.compile(QueryTranslatorImpl.java:134)
'DAYS'看起来像一个Sybase函数,我怀疑HQL会支持它。请更新您的问题,并告诉我们您正在使用的数据库以及此查询应该执行的操作。 –
Hello Tim Beigeleisn,数据库是DB2,查询从配置文件和帐户表中检索其帐户号不为空的客户详细信息,并计算他们持有帐户的时间。持续时间以天计。 – BrinzN
我不认为你可以使用'DAYS'。更改您的查询。 –