Problem with expressions in criteria CASE WHEN OTHERWISE
---------------------------------------------------------
Key: HHH-7277
URL:
https://hibernate.onjira.com/browse/HHH-7277
Project: Hibernate ORM
Issue Type: Bug
Components: query-criteria
Affects Versions: 4.1.2, 3.6.1
Environment: Windows 7, JRE 1.6, JPA 2.0, MySQL, SQL Server 10.50.1600.1
Reporter: Srini
JPA/Hibernate is not allowing to use an expression in WHEN and OTHERWISE clause of CASE
statement. Following is criteria code, generated JPQL and the error it is throwing
Case<String> sectorCase = cb.selectCase();
sectorCase.when(cb.notEqual(sectors.get(Sectors_.sectorName),
Constants.ACCOUNT_TYPE_RESIDENTIAL), root.get(Customers_.customerName)).
otherwise(cb.concat(root.get(Customers_.firstName),
root.get(Customers_.lastName)));
List<Selection<?>> selectCols = new ArrayList<Selection<?>>();
selectCols.add(root.get(Customers_.id).alias("id"));
selectCols.add(sectorCase.alias("name"));
cq.multiselect(selectCols);
Error Details:
Caused by: org.hibernate.hql.internal.ast.QuerySyntaxException: expecting "end",
found '||' near line 1, column 171 [select distinct generatedAlias0.id, case when
sector.sectorName<>:param0 then generatedAlias0.customerName else
generatedAlias0.firstName || generatedAlias0.lastName end from
com.abc.persistence.entity.Customers as generatedAlias0 left join generatedAlias0.sectors
as sector order by case when sector.sectorName<>:param2 then
generatedAlias0.customerName else generatedAlias0.firstName || generatedAlias0.lastName
end asc]
at
org.hibernate.hql.internal.ast.QuerySyntaxException.convert(QuerySyntaxException.java:54)
at
org.hibernate.hql.internal.ast.QuerySyntaxException.convert(QuerySyntaxException.java:47)
at org.hibernate.hql.internal.ast.ErrorCounter.throwQueryException(ErrorCounter.java:79)
at
org.hibernate.hql.internal.ast.QueryTranslatorImpl.parse(QueryTranslatorImpl.java:276)
at
org.hibernate.hql.internal.ast.QueryTranslatorImpl.doCompile(QueryTranslatorImpl.java:180)
at
org.hibernate.hql.internal.ast.QueryTranslatorImpl.compile(QueryTranslatorImpl.java:136)
at org.hibernate.engine.query.spi.HQLQueryPlan.<init>(HQLQueryPlan.java:101)
at org.hibernate.engine.query.spi.HQLQueryPlan.<init>(HQLQueryPlan.java:80)
at
org.hibernate.engine.query.spi.QueryPlanCache.getHQLQueryPlan(QueryPlanCache.java:119)
at
org.hibernate.internal.AbstractSessionImpl.getHQLQueryPlan(AbstractSessionImpl.java:215)
at org.hibernate.internal.AbstractSessionImpl.createQuery(AbstractSessionImpl.java:193)
at org.hibernate.internal.SessionImpl.createQuery(SessionImpl.java:1649)
at
org.hibernate.ejb.AbstractEntityManagerImpl.createQuery(AbstractEntityManagerImpl.java:488)
--
This message is automatically generated by JIRA.
For more information on JIRA, see:
http://www.atlassian.com/software/jira