[hibernate-issues] [Hibernate-JIRA] Updated: (HHH-6812) HQL query for map value leads to incorrect joins in SQL

Gail Badner (JIRA) noreply at atlassian.com
Mon Jan 9 02:17:09 EST 2012


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

Gail Badner updated HHH-6812:
-----------------------------

    Affects Version/s: 4.0.0.Final

> HQL query for map value leads to incorrect joins in SQL
> -------------------------------------------------------
>
>                 Key: HHH-6812
>                 URL: http://opensource.atlassian.com/projects/hibernate/browse/HHH-6812
>             Project: Hibernate Core
>          Issue Type: Bug
>          Components: query-hql, query-sql
>    Affects Versions: 3.6.7, 4.0.0.Final
>         Environment: Oracle Java 1.6.0_29, Hibernate 3.6.7-Final, Hsqldb 2.2.5
>            Reporter: Neukomm
>              Labels: HQL, query
>         Attachments: map_query_test.zip
>
>
> Whenever an expression like 'where p.map['key'] = :val' is used in HQL, the join between the entity table and the map value table is not done correctly. This leads to missing results.
> The attached test case uses HQL like this:
> from MapQueryEntity p where p.name = 'B' or p.map['key'] = 'value'
> the corresponding sql looks like this:
>     select
>         mapqueryen0_.id as id0_,
>         mapqueryen0_.name as name0_ 
>     from
>         MapQueryEntity mapqueryen0_ cross 
>     join
>         MapQueryEntity_map map1_ 
>     where
>         mapqueryen0_.id=map1_.ident 
>         and map1_.mkey = 'key' 
>         and (
>             mapqueryen0_.name='B'
>             or map1_.mvalue='value'
>         )
> This leads to all entities that don't have a map entry for key 'key' not to be in the result,
> even if they have name 'B'.
> SQL that would return the correct rows (at least on hsqldb) could e.g. look like this:
>     select
>         mapqueryen0_.id as id0_,
>         mapqueryen0_.name as name0_ 
>     from
>         MapQueryEntity mapqueryen0_
>     left outer join
>         MapQueryEntity_map map1_ 
> 	on mapqueryen0_.id=map1_.ident 
>     where
>       mapqueryen0_.name='B'
>       or (map1_.mkey = 'key' and map1_.mvalue='value')
> Looks like org.hibernate.hql.ast.tree.IndexNode (which seems to be responsible for the hql/sql translation if '[]' is used) doesn't work correctly for this case.

--
This message is automatically generated by JIRA.
For more information on JIRA, see: http://www.atlassian.com/software/jira

        


More information about the hibernate-issues mailing list