In my opinion if we want to allow aliases overriding the scope should
follows the Java rules, it's easier to understand for a Java developer and
the second query should just be considered a bad written one.
On 7 October 2015 at 15:27, Steve Ebersole <steve(a)hibernate.org> wrote:
>
> > Here the aliases `c` do infringe. In the subquery, we don't really
know
> > which reference the `c` alias should resolve to. We *could* here
> assuming
> > that the subquery is uncorrelated. Bu without this rule we really
would
> > not know that the subquery is correlated
>
> Out of curiosity, Couldn't for this case assume that the second alias
> overrides the first.
> This might cause some hard to spot errors, though.
>
The issue really is for cases of correlated subqueries (where the subquery
refers to the outer query). So imagine a query such as:
select ...
from Salesperson s
where exists (
select count(*)
from Sale s2
where s.id = s2.salesperson.id ...
group by s2.salesperson.id
having count(*) > :sales
)
So here the predicate `s.id = s2.salesperson.id` defines a correlation
beween hthe queries. If we allowed the "alias overriding", it is quite
possible for the user to (mistakenly) write this query as:
select ...
from Salesperson s
where exists (
select count(*)
from Sale s
where s.id = s.salesperson.id ...
group by s.salesperson.id
having count(*) > :sales
)
Which validates fine, but is not *really* what they meant and would not
return what they are looking for.
_______________________________________________
hibernate-dev mailing list
hibernate-dev(a)lists.jboss.org
https://lists.jboss.org/mailman/listinfo/hibernate-dev