[
http://opensource.atlassian.com/projects/hibernate/browse/HHH-5755?page=c...
]
Guy Veraghtert updated HHH-5755:
--------------------------------
Attachment: HHH-5755.patch
The current CriteriaQueryCompiler first generates a JPAQL string, that string is parsed
again to eventually generate SQL (see class comment). Apparently when generating the JPAQL
string, the hibernate type should be used as cast type, otherwise the JPAQL string cannot
be parsed again.
Attached a patch containing a testcase + possible fix?
javax.persistence.criteria.Expression.as() is broken
----------------------------------------------------
Key: HHH-5755
URL:
http://opensource.atlassian.com/projects/hibernate/browse/HHH-5755
Project: Hibernate Core
Issue Type: Bug
Components: entity-manager
Affects Versions: 3.6.0
Reporter: Artem Troitskiy
Priority: Minor
Attachments: HHH-5755.patch
When I try to execute criteria query containing typecast to {{String}}
{noformat}
CriteriaQuery<Product> criteria = builder.createQuery( Product.class );
Root<Product> from = criteria.from( Product.class );
criteria.where(builder.like(from.get("partNumber").as(String.class),
"1%"));
List<Product> result = em.createQuery( criteria ).getResultList();
{noformat}
I get the following exception
{quote}
org.hibernate.hql.ast.QuerySyntaxException: expecting CLOSE, found '(' near line
1, column 132 [select generatedAlias0 from org.hibernate.ejb.metamodel.Product as
generatedAlias0 where cast(generatedAlias0.partNumber as varchar(255)) like :param0]
{quote}
As you can see, SQL type is used in HQL {{cast}} clause. It's caused by
{{CriteriaQueryCompiler.RenderingContext.getCastType()}} that erroneously return SQL
typename instead of Hibernate typename.
--
This message is automatically generated by JIRA.
-
If you think it was sent incorrectly contact one of the administrators:
http://opensource.atlassian.com/projects/hibernate/secure/Administrators....
-
For more information on JIRA, see:
http://www.atlassian.com/software/jira