]
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: