|
When trying to use a more complicated expression than a simple field name as an argument to org.hibernate.ejb.criteria.CriteriaBuilderImpl's countDistinct method I get a QuerySyntaxException upon running the query. Here's what I'm doing specifically in pseudo code. I'm writing this in clojure and I doubt you want to see that.
builder = entity_manager.getCriteriaBuilder();
criteria = entity_manager.createQuery();
Root root = criteria.from(ClaimTransaction);
Expression exp = builder.countDistinct(builder.concat(root.get("text_field_1"),root.get("text_field_2"));
criteria.select(exp);
entity_manager.createQuery(criteria).getResultList();
It looks like the JPA builder generates sql that works fine in postgresql, but then hibernate blows up when it tries to read it back in through the parser when createQuery is run. Here is my exact error:
QuerySyntaxException expecting CLOSE, found '||' near line 1, column 51 [select count(distinct generatedAlias0.claimNumber || generatedAlias1.cmsHcpcsCodeId) from harbinger.sdk.data.ClaimTransaction as generatedAlias1 left join generatedAlias1.claim as generatedAlias0] org.hibernate.hql.internal.ast.QuerySyntaxException.convert (QuerySyntaxException.java:54)
ERROR: line 1:51: expecting CLOSE, found '||'
line 1:51: expecting CLOSE, found '||'
at antlr.Parser.match(Parser.java:211)
at org.hibernate.hql.internal.antlr.HqlBaseParser.aggregate(HqlBaseParser.java:4599)
at org.hibernate.hql.internal.antlr.HqlBaseParser.identPrimary(HqlBaseParser.java:4115)
at org.hibernate.hql.internal.antlr.HqlBaseParser.primaryExpression(HqlBaseParser.java:860)
at org.hibernate.hql.internal.antlr.HqlBaseParser.atom(HqlBaseParser.java:3472)
at org.hibernate.hql.internal.antlr.HqlBaseParser.unaryExpression(HqlBaseParser.java:3250)
at org.hibernate.hql.internal.antlr.HqlBaseParser.multiplyExpression(HqlBaseParser.java:3122)
at org.hibernate.hql.internal.antlr.HqlBaseParser.additiveExpression(HqlBaseParser.java:2828)
at org.hibernate.hql.internal.antlr.HqlBaseParser.concatenation(HqlBaseParser.java:568)
at org.hibernate.hql.internal.antlr.HqlBaseParser.relationalExpression(HqlBaseParser.java:2595)
at org.hibernate.hql.internal.antlr.HqlBaseParser.equalityExpression(HqlBaseParser.java:2456)
at org.hibernate.hql.internal.antlr.HqlBaseParser.negatedExpression(HqlBaseParser.java:2420)
at org.hibernate.hql.internal.antlr.HqlBaseParser.logicalAndExpression(HqlBaseParser.java:2336)
at org.hibernate.hql.internal.antlr.HqlBaseParser.logicalOrExpression(HqlBaseParser.java:2301)
at org.hibernate.hql.internal.antlr.HqlBaseParser.expression(HqlBaseParser.java:2011)
at org.hibernate.hql.internal.antlr.HqlBaseParser.aliasedExpression(HqlBaseParser.java:2254)
at org.hibernate.hql.internal.antlr.HqlBaseParser.selectedPropertiesList(HqlBaseParser.java:1384)
at org.hibernate.hql.internal.antlr.HqlBaseParser.selectClause(HqlBaseParser.java:1294)
at org.hibernate.hql.internal.antlr.HqlBaseParser.selectFrom(HqlBaseParser.java:1031)
at org.hibernate.hql.internal.antlr.HqlBaseParser.queryRule(HqlBaseParser.java:701)
at org.hibernate.hql.internal.antlr.HqlBaseParser.selectStatement(HqlBaseParser.java:294)
at org.hibernate.hql.internal.antlr.HqlBaseParser.statement(HqlBaseParser.java:157)
at org.hibernate.hql.internal.ast.QueryTranslatorImpl.parse(QueryTranslatorImpl.java:266)
at org.hibernate.hql.internal.ast.QueryTranslatorImpl.doCompile(QueryTranslatorImpl.java:180)
at org.hibernate.hql.internal.ast.QueryTranslatorImpl.compile(QueryTranslatorImpl.java:136)
|