[hibernate-dev] SQM - alias registry

andrea boriero dreborier at gmail.com
Wed Oct 7 11:28:36 EDT 2015


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 at 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 at lists.jboss.org
> https://lists.jboss.org/mailman/listinfo/hibernate-dev
>


More information about the hibernate-dev mailing list