[
http://opensource.atlassian.com/projects/hibernate/browse/HHH-4991?page=c...
]
Strong Liu updated HHH-4991:
----------------------------
Hi Steve,
After some debug, looks like this issue is caused by HHH-3414.
the in method, org.hibernate.loader.JoinWalker.walkCollectionTree(QueryableCollection,
String, String, int):
if the type is manytomany, then it calls
{noformat}
final int joinType = getJoinType(
associationType,
persister.getFetchMode(),
persister.getTableName(),
lhsColumns,
!useInnerJoin,
currentDepth - 1,
null //operations which cascade as far as the collection also cascade to collection
elements
);
{noformat}
this getJoinType was overrided in org.hibernate.loader.criteria.CriteriaJoinWalker, but
according to fisheye, it is removed by the fix of HHH-3414,
would you like take a look of this issue?
ManyToMany table not joined due to max_join_depth parameter, results
to SQL exceptions
--------------------------------------------------------------------------------------
Key: HHH-4991
URL:
http://opensource.atlassian.com/projects/hibernate/browse/HHH-4991
Project: Hibernate Core
Issue Type: Bug
Components: query-criteria
Affects Versions: 3.5.0-CR-2
Environment: Hibernate 3.5.0-CR-2, MacOS X, MySQL 5.1
Reporter: Sergii Novotarskyi
Attachments: Example.zip, hhh-4991-testcase.patch
*max_join_depth* parameter prevents Hibernate from joining one end of ManyToMany
relationship when using Criteria API, if the relationship is "far" enough from
the root entity.
{quote}
Criteria c = session.createCriteria(SubEntity.class)
.createAlias("entity", "e") // ManyToOne, inner
join
.createAlias("e.entity", "ee") // ManyToOne, inner
join
.createAlias("ee.sides", "s") // ManyToMany, inner
join + left outer join
.setProjection(Projections.count("id"))
.add(Restrictions.ne("s.data", "abc"));
{quote}
When *max_join_depth* is set to *2* (default) the above example generates following SQL
query
{quote}
select count(this_.sub_id) as y0_ from SubEntity this_
inner join SubMainEntity e1_ on this_.submain_id=e1_.submain_id
inner join MainEntity ee2_ on e1_.main_id=ee2_.main_id
inner join MainSide sides7_ on ee2_.main_id=sides7_.main_id
where s3_.data<>?
{quote}
The query, naturally, throws the "Unknown column 's3_.data' in 'where
clause'" exception.
Expected query would be
{quote}
select count(this_.sub_id) as y0_ from SubEntity this_
inner join SubMainEntity e1_ on this_.submain_id=e1_.submain_id
inner join MainEntity ee2_ on e1_.main_id=ee2_.main_id
inner join MainSide sides7_ on ee2_.main_id=sides7_.main_id
left outer join SideEntity s3_ on sides7_.side_id=s3_.side_id
where s3_.data<>?
{quote}
--
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