[hibernate-issues] [Hibernate-JIRA] Resolved: (HHH-3154) Criteria API use - duplicate SQL alias might be generated for subquery

Gail Badner (JIRA) noreply at atlassian.com
Tue Mar 4 17:30:34 EST 2008


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

Gail Badner resolved HHH-3154.
------------------------------

      Assignee: Gail Badner
    Resolution: Duplicate

Thanks, Denis, I've added a comment to HHH-3154 that an explanation can be found in this issue.

> Criteria API use - duplicate SQL alias might be generated for subquery
> ----------------------------------------------------------------------
>
>                 Key: HHH-3154
>                 URL: http://opensource.atlassian.com/projects/hibernate/browse/HHH-3154
>             Project: Hibernate3
>          Issue Type: Bug
>          Components: query-criteria
>    Affects Versions: 3.2.6
>            Reporter: Denis Mukhin
>            Assignee: Gail Badner
>
> From org/hibernate/criterion/SubqueryExpression.java - Hibernate 3.2.6 sources:
> -------------------------------
> private void createAndSetInnerQuery(CriteriaQuery criteriaQuery, final SessionFactoryImplementor factory) {
> ...
> //with two-deep subqueries, the same alias would get generated for
> //both using the old method (criteriaQuery.generateSQLAlias()), so
> //that is now used as a fallback if the main criteria alias isn't set
> String alias;
> if ( this.criteriaImpl.getAlias() == null ) {
> alias = criteriaQuery.generateSQLAlias();
> }
> else {
> alias = this.criteriaImpl.getAlias() + "_";
> }
> ...
> }
> -------------------------------
> This implementation means that if DetachedCriteria (passed to SubqueryExpression constructor) created without alias explicitely specified, generated SQL alias might be duplicate of what is generated for outer query because:
> 1. Class org.hibernate.impl.CriteriaImpl has 2 arg constructor (entity/class name and session implementor). It creates object with alias set to "this". This constructor is used from DetachedCriteria.forEntityName(String) or DetachedCriteria.forName(Class), thus DetachedCriteria is created with not-null default alias.
> 2. As comment in original code says generateSQLAlias() also may return duplicate names.
> The simplest solution I see is to always generate there SQL alias based, for instance, on SubqueryExpression class name and increasing counter stored in static field.

-- 
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.jspa
-
For more information on JIRA, see: http://www.atlassian.com/software/jira

        



More information about the hibernate-issues mailing list