[hibernate-issues] [Hibernate-JIRA] Updated: (HHH-5755) javax.persistence.criteria.Expression.as() is broken

Guy Veraghtert (JIRA) noreply at atlassian.com
Mon Apr 4 15:51:09 EDT 2011


     [ http://opensource.atlassian.com/projects/hibernate/browse/HHH-5755?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel ]

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.jspa
-
For more information on JIRA, see: http://www.atlassian.com/software/jira

        


More information about the hibernate-issues mailing list