[hibernate-issues] [Hibernate-JIRA] Created: (HHH-3224) Invalid generated SQL for nested queries

Adam Dyga (JIRA) noreply at atlassian.com
Mon Apr 7 12:06:33 EDT 2008


Invalid generated SQL for nested queries
----------------------------------------

                 Key: HHH-3224
                 URL: http://opensource.atlassian.com/projects/hibernate/browse/HHH-3224
             Project: Hibernate3
          Issue Type: Bug
          Components: query-hql
    Affects Versions: 3.2.6
         Environment: MySQL
            Reporter: Adam Dyga


I'm facing a problem with invalid generated SQL for nested queries.
I've the following class hierarchy (left only the most important fields for clarity):

//base class
class Asset {
   String description; // <- field in base class
}

class ImageSet {
   List<Wallpaper> wallpapers;
}

class Wallpaper extends Asset { // <- inherits from Asset
}


The HBM mappings:


<class name="com.company.Asset" table="Asset" abstract="true">
  <property name="description" column="description" type="string" />
  <id>...</id>
</class>

<class name="ImageSet" table="ImageSets">
    <bag name="wallpapers" cascade="delete-orphan" inverse="true"
      table="Wallpapers">
      <key column="imageSetId" />
      <one-to-many class="com.company.Wallpaper" />
    </bag>
</class>

<joined-subclass name="com.company.Wallpaper"
    extends="com.company.Asset" table="Wallpapers">

    <key column="id" />

    <many-to-one name="imageSet" column="imageSetId"
      class="com.company.ImageSet" />

</joined-subclass>


When I try to execute the following HQL query:


select distinct imageSet from ImageSet imageSet where (select count(*) from imageSet.wallpapers w where w.description is not null) = size(imageSet.wallpapers)


I get the following SQL query:


select distinct imageset0_.id as id14_ from ImageSets imageset0_ where (select count(*) from Wallpapers wallpapers1_ where imageset0_.id=wallpapers1_.imageSetId and (wallpapers1_1_.description is not null)])=(select count(wallpapers2_.imageSetId) from Wallpapers wallpapers2_ inner join Asset wallpapers2_1_ on wallpapers2_.id=wallpapers2_1_.id where imageset0_.id=wallpapers2_.imageSetId)


The error message is 

Unknown column 'wallpapers1_1_.description' in 'where clause'

which is right - note the missing wallpapers1_1_ alias which should be defined during inner join of the Wallpapers table with the base Asset table in the first nested query - just as it is done in the second nested query.

Full stack trace of any exception that occurs:

org.hibernate.exception.SQLGrammarException: could not execute query
	at org.hibernate.exception.SQLStateConverter.convert(SQLStateConverter.java:67)
	at org.hibernate.exception.JDBCExceptionHelper.convert(JDBCExceptionHelper.java:43)
	at org.hibernate.loader.Loader.doList(Loader.java:2216)
	at org.hibernate.loader.Loader.listIgnoreQueryCache(Loader.java:2104)
	at org.hibernate.loader.Loader.list(Loader.java:2099)
	at org.hibernate.loader.hql.QueryLoader.list(QueryLoader.java:378)
	at org.hibernate.hql.ast.QueryTranslatorImpl.list(QueryTranslatorImpl.java:338)
	at org.hibernate.engine.query.HQLQueryPlan.performList(HQLQueryPlan.java:172)
	at org.hibernate.impl.SessionImpl.list(SessionImpl.java:1121)
	at org.hibernate.impl.QueryImpl.list(QueryImpl.java:79)	
Caused by: com.mysql.jdbc.exceptions.MySQLSyntaxErrorException: Unknown column 'wallpapers1_1_.description' in 'where clause'
	at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:936)
	at com.mysql.jdbc.MysqlIO.checkErrorPacket(MysqlIO.java:2870)
	at com.mysql.jdbc.MysqlIO.sendCommand(MysqlIO.java:1573)
	at com.mysql.jdbc.MysqlIO.sqlQueryDirect(MysqlIO.java:1665)
	at com.mysql.jdbc.Connection.execSQL(Connection.java:3176)
	at com.mysql.jdbc.PreparedStatement.executeInternal(PreparedStatement.java:1153)
	at com.mysql.jdbc.PreparedStatement.executeQuery(PreparedStatement.java:1266)


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