These old forums are deprecated now and set to read-only. We are waiting for you on our new forums!
More modern, Discourse-based and with GitHub/Google/Twitter authentication built-in.

All times are UTC - 5 hours [ DST ]



Forum locked This topic is locked, you cannot edit posts or make further replies.  [ 1 post ] 
Author Message
 Post subject: Query selecting entity property and joining on collection
PostPosted: Wed Mar 22, 2006 5:25 pm 
Newbie

Joined: Wed Mar 22, 2006 4:48 pm
Posts: 1
Location: Nebraska, USA
I have an HQL statement that is missing a join clause in the generated SQL. The entity is using a hierarchy with joined subclass. I am using annotations to define the mapping. I want to query based on a subclass property, so hibernate has to do a "downcast" of some sort. Here's the HQL:

Code:
select pound.location.state from "+Pound.class.getName()+" as pound inner join pound.cats as cat where pound.location.name='Anytown' and cat.meanness > 5


This works fine if I do not have the select clause, when I add the select clause it fails and removes the join for the subclass "Bobcat", which has the property "meanness". I have included a full test case including configuration.

This looks related to the recently fixed bug HHH-1248.

I do not think I am doing anything incorrect here, any help?

Hibernate version:
Hibernate 3.1.3
Annotations 3.1 beta 8

Full test case
Code:
package com.i2rd.occasio.test;

import java.util.HashSet;
import java.util.Properties;
import java.util.Set;
import javax.persistence.*;
import org.hibernate.*;
import org.hibernate.cfg.*;
import org.hibernate.tool.hbm2ddl.SchemaUpdate;
import org.hibernate.validator.NotNull;

/**
* Test for broken hibernate down cast.
*/
public class BrokenHibernateDowncast
{
    @Entity
    @Table(name="cat")
    @Inheritance(strategy=InheritanceType.JOINED)
    public static class Cat
    {
        @Id @GeneratedValue(strategy=GenerationType.AUTO, generator="cat_id_seq")
        @NotNull
        @javax.persistence.SequenceGenerator(
                name="cat_id_seq",
                sequenceName="cat_id_seq"
            )
        long id;
        String name;
    }
   
    @Entity
    @Table(name="domesticcat")
    public static class DomesticCat extends Cat
    {
        String region;
    }
   
    @Entity
    @Table(name="bobcat")
    public static class Bobcat extends Cat
    {
        int meanness;
    }

    @Entity
    @Table(name="dog")
    @Inheritance(strategy=InheritanceType.JOINED)
    public static class Dog
    {
        @Id @GeneratedValue(strategy=GenerationType.AUTO, generator="dog_id_seq")
        @NotNull
        @javax.persistence.SequenceGenerator(
                name="dog_id_seq",
                sequenceName="dog_id_seq"
            )
        long id;
        String name;
    }

    @Entity
    public static class ToyDog extends Dog
    {
        int tinyness;
    }
   
    @Entity
    public static class LargeDog extends Dog
    {
        int largeness;
    }
   
    @Entity
    @Table(name="city")
    public static class City
    {
        @Id @GeneratedValue(strategy=GenerationType.AUTO, generator="city_id_seq")
        @NotNull
        @javax.persistence.SequenceGenerator(
                name="city_id_seq",
                sequenceName="city_id_seq"
            )
        long id;
        String name;
        String state;
    }

    @Entity
    @Table(name="pound")
    public static class Pound
    {
        @Id @GeneratedValue(strategy=GenerationType.AUTO, generator="pound_id_seq")
        @NotNull
        @javax.persistence.SequenceGenerator(
                name="pound_id_seq",
                sequenceName="pound_id_seq"
            )
        long id;
        @ManyToOne
        @NotNull
        City location;
        @OneToMany
        Set<Cat> cats = new HashSet<Cat>();
        @OneToMany
        Set<Dog> dogs = new HashSet<Dog>();
    }
   
    public static void main(String[] args) throws Exception
    {
        Properties props = new Properties();
        props.put("hibernate.dialect", "org.hibernate.dialect.PostgreSQLDialect");
        props.put("hibernate.connection.driver_class", "org.postgresql.Driver");
        props.put("hibernate.connection.url", "jdbc:postgresql://localhost/thepound");
        props.put("hibernate.connection.username", "whatever");
        props.put("hibernate.connection.password", "");
        props.put("hibernate.show_sql", "true");
        props.put("hibernate.format_sql", "true");
        props.put("hibernate.connection.release_mode", "on_close");
        props.put("hibernate.hbm2ddl.auto", "create");
       
        Configuration cfg = new AnnotationConfiguration()
            .addAnnotatedClass(Pound.class)
            .addAnnotatedClass(Cat.class)
            .addAnnotatedClass(DomesticCat.class)
            .addAnnotatedClass(Bobcat.class)
            .addAnnotatedClass(City.class)
            .addAnnotatedClass(Dog.class)
            .addAnnotatedClass(ToyDog.class)
            .addAnnotatedClass(LargeDog.class)
            .setProperties(props);
        SchemaUpdate update = new SchemaUpdate(cfg, props);
        update.execute(true, true);
        SessionFactory sessionFactory = cfg.buildSessionFactory();
        Session session = sessionFactory.openSession();

        City anytown = new City();
        anytown.name = "Anytown";
        anytown.state = "NE";
        session.save(anytown);
       
        DomesticCat dc = new DomesticCat();
        dc.name="charley";
        dc.region="Midwest USA";
        session.save(dc);
       
        Bobcat bc = new Bobcat();
        bc.name="bobby";
        bc.meanness=10;
        session.save(bc);

        ToyDog poodle = new ToyDog();
        poodle.name="fifi";
        poodle.tinyness = 1;
        session.save(poodle);
       
        LargeDog dob = new LargeDog();
        dob.name="max";
        dob.largeness = 100;
        session.save(dob);
       
        Pound pound = new Pound();
        pound.location = anytown;
        pound.cats.add(dc);
        pound.cats.add(bc);
        pound.dogs.add(poodle);
        pound.dogs.add(dob);
        session.save(pound);
       
        session.flush();
       
        // This works:
        System.out.println(session.createQuery("from "+Pound.class.getName()
                +" as pound inner join pound.cats as cat left join pound.dogs as dog where pound.location.name='Anytown' and cat.meanness > 5").list());

        // This does not: the difference being the select clause, the extra 'left join' does not seem to make a difference
        System.out.println(session.createQuery("select pound.location.state from "+Pound.class.getName()
                +" as pound inner join pound.cats as cat where pound.location.name='Anytown' and cat.meanness > 5").list());

        // This does not: the difference being the select clause
        System.out.println(session.createQuery("select pound.location.state from "+Pound.class.getName()
                +" as pound inner join pound.cats as cat left join pound.dogs as dog where pound.location.name='Anytown' and cat.meanness > 5").list());

        session.close();
    }
   
    private BrokenHibernateDowncast()
    {
        super();
    }
}


Full stack trace of any exception that occurs:
Code:
06-03-22 15:05:24,467 WARN org.hibernate.util.JDBCExceptionReporter - SQL Error: 0, SQLState: 42P01
2006-03-22 15:05:24,469 ERROR org.hibernate.util.JDBCExceptionReporter - ERROR: missing FROM-clause entry for table "brokenhibe2_2_"
Exception in thread "main" 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:2148)
   at org.hibernate.loader.Loader.listIgnoreQueryCache(Loader.java:2029)
   at org.hibernate.loader.Loader.list(Loader.java:2024)
   at org.hibernate.loader.hql.QueryLoader.list(QueryLoader.java:375)
   at org.hibernate.hql.ast.QueryTranslatorImpl.list(QueryTranslatorImpl.java:308)
   at org.hibernate.engine.query.HQLQueryPlan.performList(HQLQueryPlan.java:153)
   at org.hibernate.impl.SessionImpl.list(SessionImpl.java:1106)
   at org.hibernate.impl.QueryImpl.list(QueryImpl.java:79)
   at com.i2rd.occasio.test.BrokenHibernateDowncast.main(BrokenHibernateDowncast.java:179)
Caused by: org.postgresql.util.PSQLException: ERROR: missing FROM-clause entry for table "brokenhibe2_2_"
   at org.postgresql.core.v3.QueryExecutorImpl.receiveErrorResponse(QueryExecutorImpl.java:1512)
   at org.postgresql.core.v3.QueryExecutorImpl.processResults(QueryExecutorImpl.java:1297)
   at org.postgresql.core.v3.QueryExecutorImpl.execute(QueryExecutorImpl.java:188)
   at org.postgresql.jdbc2.AbstractJdbc2Statement.execute(AbstractJdbc2Statement.java:437)
   at org.postgresql.jdbc2.AbstractJdbc2Statement.executeWithFlags(AbstractJdbc2Statement.java:353)
   at org.postgresql.jdbc2.AbstractJdbc2Statement.executeQuery(AbstractJdbc2Statement.java:257)
   at org.hibernate.jdbc.AbstractBatcher.getResultSet(AbstractBatcher.java:139)
   at org.hibernate.loader.Loader.getResultSet(Loader.java:1669)
   at org.hibernate.loader.Loader.doQuery(Loader.java:662)
   at org.hibernate.loader.Loader.doQueryAndInitializeNonLazyCollections(Loader.java:224)
   at org.hibernate.loader.Loader.doList(Loader.java:2145)
   ... 8 more


Name and version of the database you are using:
PostgreSQL 8.1.3

The generated SQL (show_sql=true):
You can see the join that should be there for "Bobcat", aliased as "brokenhibe2_2_" is missing, although the query references it.
Code:
    select
        brokenhibe3_.state as col_0_0_
    from
        pound brokenhibe0_
    inner join
        pound_cat cats1_
            on brokenhibe0_.id=cats1_.pound_id
    inner join
        cat brokenhibe2_
            on cats1_.cats_id=brokenhibe2_.id,
        city brokenhibe3_
    where
        brokenhibe0_.location_id=brokenhibe3_.id
        and brokenhibe3_.name='Anytown'
        and brokenhibe2_2_.meanness>5


Debug level Hibernate log excerpt:
Code:
2006-03-22 15:18:18,127 DEBUG [null main] query.QueryPlanCache (QueryPlanCache.java:69) - unable to locate HQL query plan in cache; generating (select pound.location.state from com.i2rd.occasio.test.BrokenHibernateDowncast$Pound as pound inner join pound.cats as cat where pound.location.name='Anytown' and cat.meanness > 5)
2006-03-22 15:18:18,129 DEBUG [null main] ast.QueryTranslatorImpl (QueryTranslatorImpl.java:236) - parse() - HQL: select pound.location.state from com.i2rd.occasio.test.BrokenHibernateDowncast$Pound as pound inner join pound.cats as cat where pound.location.name='Anytown' and cat.meanness > 5
2006-03-22 15:18:18,140 DEBUG [null main] ast.QueryTranslatorImpl (QueryTranslatorImpl.java:252) - --- HQL AST ---
\-[QUERY] 'query'
    +-[SELECT_FROM] 'SELECT_FROM'
    |  +-[FROM] 'from'
    |  |  +-[RANGE] 'RANGE'
    |  |  |  +-[DOT] '.'
    |  |  |  |  +-[DOT] '.'
    |  |  |  |  |  +-[DOT] '.'
    |  |  |  |  |  |  +-[DOT] '.'
    |  |  |  |  |  |  |  +-[IDENT] 'com'
    |  |  |  |  |  |  |  \-[IDENT] 'i2rd'
    |  |  |  |  |  |  \-[IDENT] 'occasio'
    |  |  |  |  |  \-[IDENT] 'test'
    |  |  |  |  \-[IDENT] 'BrokenHibernateDowncast$Pound'
    |  |  |  \-[ALIAS] 'pound'
    |  |  \-[JOIN] 'join'
    |  |     +-[INNER] 'inner'
    |  |     +-[DOT] '.'
    |  |     |  +-[IDENT] 'pound'
    |  |     |  \-[IDENT] 'cats'
    |  |     \-[ALIAS] 'cat'
    |  \-[SELECT] 'select'
    |     \-[DOT] '.'
    |        +-[DOT] '.'
    |        |  +-[IDENT] 'pound'
    |        |  \-[IDENT] 'location'
    |        \-[IDENT] 'state'
    \-[WHERE] 'where'
       \-[AND] 'and'
          +-[EQ] '='
          |  +-[DOT] '.'
          |  |  +-[DOT] '.'
          |  |  |  +-[IDENT] 'pound'
          |  |  |  \-[IDENT] 'location'
          |  |  \-[IDENT] 'name'
          |  \-[QUOTED_STRING] ''Anytown''
          \-[GT] '>'
             +-[DOT] '.'
             |  +-[IDENT] 'cat'
             |  \-[IDENT] 'meanness'
             \-[NUM_INT] '5'

2006-03-22 15:18:18,143 DEBUG [null main] ast.ErrorCounter (ErrorCounter.java:68) - throwQueryException() : no errors
2006-03-22 15:18:18,143 DEBUG [null main] antlr.HqlSqlBaseWalker (HqlSqlBaseWalker.java:111) - select << begin [level=1, statement=select]
2006-03-22 15:18:18,152 DEBUG [null main] tree.FromElement (FromElement.java:104) - FromClause{level=1} :  com.i2rd.occasio.test.BrokenHibernateDowncast$Pound (pound) -> brokenhibe0_
2006-03-22 15:18:18,153 DEBUG [null main] tree.FromReferenceNode (FromReferenceNode.java:51) - Resolved :  pound -> brokenhibe0_.id
2006-03-22 15:18:18,155 DEBUG [null main] tree.DotNode (DotNode.java:541) - getDataType() : cats -> org.hibernate.type.SetType(com.i2rd.occasio.test.BrokenHibernateDowncast$Pound.cats)
2006-03-22 15:18:18,156 DEBUG [null main] tree.FromElementFactory (FromElementFactory.java:368) - createManyToMany() : path = pound.cats role = com.i2rd.occasio.test.BrokenHibernateDowncast$Pound.cats associatedEntityName = com.i2rd.occasio.test.BrokenHibernateDowncast$Cat
2006-03-22 15:18:18,156 DEBUG [null main] tree.FromElement (FromElement.java:104) - FromClause{level=1} :  com.i2rd.occasio.test.BrokenHibernateDowncast$Cat (cat) -> brokenhibe2_
2006-03-22 15:18:18,157 DEBUG [null main] tree.FromClause (FromClause.java:218) - addJoinByPathMap() : pound.cats -> cat brokenhibe2_
2006-03-22 15:18:18,158 DEBUG [null main] tree.DotNode (DotNode.java:265) - dereferenceCollection() : Created new FROM element for pound.cats : pound_cat brokenhibe2_
2006-03-22 15:18:18,158 DEBUG [null main] tree.FromReferenceNode (FromReferenceNode.java:51) - Resolved :  pound.cats -> .
2006-03-22 15:18:18,164 DEBUG [null main] ast.HqlSqlWalker (HqlSqlWalker.java:327) - createFromJoinElement() : -- join tree --
\-[JOIN_FRAGMENT] FromElement: 'pound_cat brokenhibe2_' FromElement{explicit,not a collection join,not a fetch join,fetch non-lazy properties,classAlias=cat,role=com.i2rd.occasio.test.BrokenHibernateDowncast$Pound.cats,tableName=cat,tableAlias=brokenhibe2_,origin=pound brokenhibe0_,colums={brokenhibe0_.id ,className=com.i2rd.occasio.test.BrokenHibernateDowncast$Cat}}

2006-03-22 15:18:18,165 DEBUG [null main] tree.FromReferenceNode (FromReferenceNode.java:51) - Resolved :  pound -> brokenhibe0_.id
2006-03-22 15:18:18,168 DEBUG [null main] tree.DotNode (DotNode.java:541) - getDataType() : location -> org.hibernate.type.ManyToOneType(com.i2rd.occasio.test.BrokenHibernateDowncast$City)
2006-03-22 15:18:18,169 DEBUG [null main] tree.DotNode (DotNode.java:348) - dereferenceEntityJoin() : generating join for location in com.i2rd.occasio.test.BrokenHibernateDowncast$Pound {no alias} parent = [  ( . ( . brokenhibe0_.id location ) state ) ]
2006-03-22 15:18:18,169 DEBUG [null main] tree.FromElement (FromElement.java:104) - FromClause{level=1} :  com.i2rd.occasio.test.BrokenHibernateDowncast$City (no alias) -> brokenhibe3_
2006-03-22 15:18:18,170 DEBUG [null main] tree.FromClause (FromClause.java:218) - addJoinByPathMap() : pound.location -> city brokenhibe3_
2006-03-22 15:18:18,170 DEBUG [null main] tree.FromReferenceNode (FromReferenceNode.java:51) - Resolved :  pound.location -> brokenhibe0_.location_id
2006-03-22 15:18:18,171 DEBUG [null main] tree.DotNode (DotNode.java:541) - getDataType() : state -> org.hibernate.type.StringType@ea3932
2006-03-22 15:18:18,172 DEBUG [null main] tree.FromReferenceNode (FromReferenceNode.java:51) - Resolved :  pound.location.state -> brokenhibe3_.state
2006-03-22 15:18:18,173 DEBUG [null main] tree.FromReferenceNode (FromReferenceNode.java:51) - Resolved :  pound -> brokenhibe0_.id
2006-03-22 15:18:18,174 DEBUG [null main] tree.DotNode (DotNode.java:541) - getDataType() : location -> org.hibernate.type.ManyToOneType(com.i2rd.occasio.test.BrokenHibernateDowncast$City)
2006-03-22 15:18:18,174 DEBUG [null main] tree.DotNode (DotNode.java:348) - dereferenceEntityJoin() : generating join for location in com.i2rd.occasio.test.BrokenHibernateDowncast$Pound {no alias} parent = [  ( . ( . brokenhibe0_.id location ) name ) ]
2006-03-22 15:18:18,175 DEBUG [null main] tree.FromReferenceNode (FromReferenceNode.java:51) - Resolved :  pound.location -> brokenhibe0_.location_id
2006-03-22 15:18:18,176 DEBUG [null main] tree.DotNode (DotNode.java:541) - getDataType() : name -> org.hibernate.type.StringType@ea3932
2006-03-22 15:18:18,176 DEBUG [null main] tree.FromReferenceNode (FromReferenceNode.java:51) - Resolved :  pound.location.name -> brokenhibe3_.name
2006-03-22 15:18:18,177 DEBUG [null main] tree.FromReferenceNode (FromReferenceNode.java:51) - Resolved :  cat -> brokenhibe2_.id
2006-03-22 15:18:18,178 DEBUG [null main] tree.DotNode (DotNode.java:541) - getDataType() : meanness -> org.hibernate.type.IntegerType@170ec24
2006-03-22 15:18:18,180 DEBUG [null main] tree.FromReferenceNode (FromReferenceNode.java:51) - Resolved :  cat.meanness -> brokenhibe2_2_.meanness
2006-03-22 15:18:18,180 DEBUG [null main] antlr.HqlSqlBaseWalker (HqlSqlBaseWalker.java:117) - select : finishing up [level=1, statement=select]
2006-03-22 15:18:18,181 DEBUG [null main] ast.HqlSqlWalker (HqlSqlWalker.java:511) - processQuery() :  ( SELECT ( {select clause} ( brokenhibe3_.state ( brokenhibe0_.location_id brokenhibe0_.id location ) state ) ) ( FromClause{level=1} ( pound brokenhibe0_ pound_cat brokenhibe2_ city brokenhibe3_ ) ) ( where ( and ( = ( brokenhibe3_.name ( brokenhibe0_.location_id brokenhibe0_.id location ) name ) 'Anytown' ) ( > ( brokenhibe2_2_.meanness brokenhibe2_.id meanness ) 5 ) ) ) )
2006-03-22 15:18:18,186 DEBUG [null main] util.SyntheticAndFactory (SyntheticAndFactory.java:58) - Using WHERE fragment [brokenhibe0_.location_id=brokenhibe3_.id]
2006-03-22 15:18:18,186 DEBUG [null main] util.JoinProcessor (JoinProcessor.java:128) - Using FROM fragment [inner join pound_cat cats1_ on brokenhibe0_.id=cats1_.pound_id inner join cat brokenhibe2_ on cats1_.cats_id=brokenhibe2_.id]
2006-03-22 15:18:18,187 DEBUG [null main] util.JoinProcessor (JoinProcessor.java:128) - Using FROM fragment [pound brokenhibe0_]
2006-03-22 15:18:18,187 DEBUG [null main] antlr.HqlSqlBaseWalker (HqlSqlBaseWalker.java:123) - select >> end [level=1, statement=select]
2006-03-22 15:18:18,193 DEBUG [null main] ast.QueryTranslatorImpl (QueryTranslatorImpl.java:222) - --- SQL AST ---
\-[SELECT] QueryNode: 'SELECT'  querySpaces (pound_cat,pound,cat,city)
    +-[SELECT_CLAUSE] SelectClause: '{select clause}'
    |  +-[DOT] DotNode: 'brokenhibe3_.state' {propertyName=state,dereferenceType=4,propertyPath=state,path=pound.location.state,tableAlias=brokenhibe3_,className=com.i2rd.occasio.test.BrokenHibernateDowncast$City,classAlias=null}
    |  |  +-[DOT] DotNode: 'brokenhibe0_.location_id' {propertyName=location,dereferenceType=1,propertyPath=location,path=pound.location,tableAlias=brokenhibe3_,className=com.i2rd.occasio.test.BrokenHibernateDowncast$City,classAlias=null}
    |  |  |  +-[ALIAS_REF] IdentNode: 'brokenhibe0_.id' {alias=pound, className=com.i2rd.occasio.test.BrokenHibernateDowncast$Pound, tableAlias=brokenhibe0_}
    |  |  |  \-[IDENT] IdentNode: 'location' {originalText=location}
    |  |  \-[IDENT] IdentNode: 'state' {originalText=state}
    |  \-[SELECT_COLUMNS] SqlNode: ' as col_0_0_'
    +-[FROM] FromClause: 'from' FromClause{level=1, fromElementCounter=3, fromElements=3, fromElementByClassAlias=[pound, cat, null], fromElementByTableAlias=[brokenhibe3_, brokenhibe0_, brokenhibe2_], fromElementsByPath=[pound.cats, pound.location], collectionJoinFromElementsByPath=[], impliedElements=[]}
    |  \-[FROM_FRAGMENT] FromElement: 'pound brokenhibe0_' FromElement{explicit,not a collection join,not a fetch join,fetch non-lazy properties,classAlias=pound,role=null,tableName=pound,tableAlias=brokenhibe0_,origin=null,colums={,className=com.i2rd.occasio.test.BrokenHibernateDowncast$Pound}}
    |     +-[JOIN_FRAGMENT] FromElement: 'inner join pound_cat cats1_ on brokenhibe0_.id=cats1_.pound_id inner join cat brokenhibe2_ on cats1_.cats_id=brokenhibe2_.id' FromElement{explicit,not a collection join,not a fetch join,fetch non-lazy properties,classAlias=cat,role=com.i2rd.occasio.test.BrokenHibernateDowncast$Pound.cats,tableName=cat,tableAlias=brokenhibe2_,origin=pound brokenhibe0_,colums={brokenhibe0_.id ,className=com.i2rd.occasio.test.BrokenHibernateDowncast$Cat}}
    |     \-[FROM_FRAGMENT] ImpliedFromElement: 'city brokenhibe3_' ImpliedFromElement{implied,not a collection join,not a fetch join,fetch non-lazy properties,classAlias=null,role=null,tableName=city,tableAlias=brokenhibe3_,origin=pound brokenhibe0_,colums={brokenhibe0_.location_id ,className=com.i2rd.occasio.test.BrokenHibernateDowncast$City}}
    \-[WHERE] SqlNode: 'where'
       +-[THETA_JOINS] SqlNode: '{theta joins}'
       |  \-[SQL_TOKEN] SqlFragment: 'brokenhibe0_.location_id=brokenhibe3_.id'
       \-[AND] SqlNode: 'and'
          +-[EQ] BinaryLogicOperatorNode: '='
          |  +-[DOT] DotNode: 'brokenhibe3_.name' {propertyName=name,dereferenceType=4,propertyPath=name,path=pound.location.name,tableAlias=brokenhibe3_,className=com.i2rd.occasio.test.BrokenHibernateDowncast$City,classAlias=null}
          |  |  +-[DOT] DotNode: 'brokenhibe0_.location_id' {propertyName=location,dereferenceType=1,propertyPath=location,path=pound.location,tableAlias=brokenhibe3_,className=com.i2rd.occasio.test.BrokenHibernateDowncast$City,classAlias=null}
          |  |  |  +-[ALIAS_REF] IdentNode: 'brokenhibe0_.id' {alias=pound, className=com.i2rd.occasio.test.BrokenHibernateDowncast$Pound, tableAlias=brokenhibe0_}
          |  |  |  \-[IDENT] IdentNode: 'location' {originalText=location}
          |  |  \-[IDENT] IdentNode: 'name' {originalText=name}
          |  \-[QUOTED_STRING] LiteralNode: ''Anytown''
          \-[GT] BinaryLogicOperatorNode: '>'
             +-[DOT] DotNode: 'brokenhibe2_2_.meanness' {propertyName=meanness,dereferenceType=4,propertyPath=meanness,path=cat.meanness,tableAlias=brokenhibe2_,className=com.i2rd.occasio.test.BrokenHibernateDowncast$Cat,classAlias=cat}
             |  +-[ALIAS_REF] IdentNode: 'brokenhibe2_.id' {alias=cat, className=com.i2rd.occasio.test.BrokenHibernateDowncast$Cat, tableAlias=brokenhibe2_}
             |  \-[IDENT] IdentNode: 'meanness' {originalText=meanness}
             \-[NUM_INT] LiteralNode: '5'

2006-03-22 15:18:18,197 DEBUG [null main] ast.ErrorCounter (ErrorCounter.java:68) - throwQueryException() : no errors
2006-03-22 15:18:18,198 DEBUG [null main] ast.QueryTranslatorImpl (QueryTranslatorImpl.java:206) - HQL: select pound.location.state from com.i2rd.occasio.test.BrokenHibernateDowncast$Pound as pound inner join pound.cats as cat where pound.location.name='Anytown' and cat.meanness > 5
2006-03-22 15:18:18,198 DEBUG [null main] ast.QueryTranslatorImpl (QueryTranslatorImpl.java:207) - SQL: select brokenhibe3_.state as col_0_0_ from pound brokenhibe0_ inner join pound_cat cats1_ on brokenhibe0_.id=cats1_.pound_id inner join cat brokenhibe2_ on cats1_.cats_id=brokenhibe2_.id, city brokenhibe3_ where brokenhibe0_.location_id=brokenhibe3_.id and brokenhibe3_.name='Anytown' and brokenhibe2_2_.meanness>5
2006-03-22 15:18:18,199 DEBUG [null main] ast.ErrorCounter (ErrorCounter.java:68) - throwQueryException() : no errors
2006-03-22 15:18:18,200 DEBUG [null main] query.HQLQueryPlan (HQLQueryPlan.java:219) - HQL param location recognition took 0 mills (select pound.location.state from com.i2rd.occasio.test.BrokenHibernateDowncast$Pound as pound inner join pound.cats as cat where pound.location.name='Anytown' and cat.meanness > 5)
2006-03-22 15:18:18,201 DEBUG [null main] query.QueryPlanCache (QueryPlanCache.java:75) - located HQL query plan in cache (select pound.location.state from com.i2rd.occasio.test.BrokenHibernateDowncast$Pound as pound inner join pound.cats as cat where pound.location.name='Anytown' and cat.meanness > 5)
2006-03-22 15:18:18,202 DEBUG [null main] def.AbstractFlushingEventListener (AbstractFlushingEventListener.java:58) - flushing session
2006-03-22 15:18:18,202 DEBUG [null main] def.AbstractFlushingEventListener (AbstractFlushingEventListener.java:111) - processing flush-time cascades
2006-03-22 15:18:18,202 DEBUG [null main] def.AbstractFlushingEventListener (AbstractFlushingEventListener.java:153) - dirty checking collections
2006-03-22 15:18:18,203 DEBUG [null main] def.AbstractFlushingEventListener (AbstractFlushingEventListener.java:170) - Flushing entities and processing referenced collections
2006-03-22 15:18:18,204 DEBUG [null main] engine.Collections (Collections.java:176) - Collection found: [com.i2rd.occasio.test.BrokenHibernateDowncast$Pound.cats#1], was: [com.i2rd.occasio.test.BrokenHibernateDowncast$Pound.cats#1] (initialized)
2006-03-22 15:18:18,204 DEBUG [null main] engine.Collections (Collections.java:176) - Collection found: [com.i2rd.occasio.test.BrokenHibernateDowncast$Pound.dogs#1], was: [com.i2rd.occasio.test.BrokenHibernateDowncast$Pound.dogs#1] (initialized)
2006-03-22 15:18:18,205 DEBUG [null main] def.AbstractFlushingEventListener (AbstractFlushingEventListener.java:209) - Processing unreferenced collections
2006-03-22 15:18:18,206 DEBUG [null main] def.AbstractFlushingEventListener (AbstractFlushingEventListener.java:223) - Scheduling collection removes/(re)creates/updates
2006-03-22 15:18:18,207 DEBUG [null main] def.AbstractFlushingEventListener (AbstractFlushingEventListener.java:85) - Flushed: 0 insertions, 0 updates, 0 deletions to 6 objects
2006-03-22 15:18:18,207 DEBUG [null main] def.AbstractFlushingEventListener (AbstractFlushingEventListener.java:91) - Flushed: 0 (re)creations, 0 updates, 0 removals to 2 collections
2006-03-22 15:18:18,208 DEBUG [null main] pretty.Printer (Printer.java:83) - listing entities:
2006-03-22 15:18:18,209 DEBUG [null main] pretty.Printer (Printer.java:90) - com.i2rd.occasio.test.BrokenHibernateDowncast$Pound{cats=[com.i2rd.occasio.test.BrokenHibernateDowncast$Cat#2, com.i2rd.occasio.test.BrokenHibernateDowncast$Cat#1], dogs=[com.i2rd.occasio.test.BrokenHibernateDowncast$Dog#2, com.i2rd.occasio.test.BrokenHibernateDowncast$Dog#1], location=com.i2rd.occasio.test.BrokenHibernateDowncast$City#1, id=1}
2006-03-22 15:18:18,209 DEBUG [null main] pretty.Printer (Printer.java:90) - com.i2rd.occasio.test.BrokenHibernateDowncast$LargeDog{largeness=100, name=max, id=2}
2006-03-22 15:18:18,210 DEBUG [null main] pretty.Printer (Printer.java:90) - com.i2rd.occasio.test.BrokenHibernateDowncast$DomesticCat{region=Midwest USA, name=charley, id=1}
2006-03-22 15:18:18,210 DEBUG [null main] pretty.Printer (Printer.java:90) - com.i2rd.occasio.test.BrokenHibernateDowncast$Bobcat{meanness=10, name=bobby, id=2}
2006-03-22 15:18:18,211 DEBUG [null main] pretty.Printer (Printer.java:90) - com.i2rd.occasio.test.BrokenHibernateDowncast$ToyDog{tinyness=1, name=fifi, id=1}
2006-03-22 15:18:18,211 DEBUG [null main] pretty.Printer (Printer.java:90) - com.i2rd.occasio.test.BrokenHibernateDowncast$City{state=NE, name=Anytown, id=1}
2006-03-22 15:18:18,211 DEBUG [null main] def.DefaultAutoFlushEventListener (DefaultAutoFlushEventListener.java:53) - Dont need to execute flush
2006-03-22 15:18:18,212 DEBUG [null main] query.HQLQueryPlan (HQLQueryPlan.java:148) - find: select pound.location.state from com.i2rd.occasio.test.BrokenHibernateDowncast$Pound as pound inner join pound.cats as cat where pound.location.name='Anytown' and cat.meanness > 5
2006-03-22 15:18:18,212 DEBUG [null main] engine.QueryParameters (QueryParameters.java:262) - named parameters: {}
2006-03-22 15:18:18,212 DEBUG [null main] jdbc.AbstractBatcher (AbstractBatcher.java:311) - about to open PreparedStatement (open PreparedStatements: 0, globally: 0)
2006-03-22 15:18:18,214 DEBUG [null main] jdbc.AbstractBatcher (AbstractBatcher.java:346) -
    select
        brokenhibe3_.state as col_0_0_
    from
        pound brokenhibe0_
    inner join
        pound_cat cats1_
            on brokenhibe0_.id=cats1_.pound_id
    inner join
        cat brokenhibe2_
            on cats1_.cats_id=brokenhibe2_.id,
        city brokenhibe3_
    where
        brokenhibe0_.location_id=brokenhibe3_.id
        and brokenhibe3_.name='Anytown'
        and brokenhibe2_2_.meanness>5
Hibernate:
    select
        brokenhibe3_.state as col_0_0_
    from
        pound brokenhibe0_
    inner join
        pound_cat cats1_
            on brokenhibe0_.id=cats1_.pound_id
    inner join
        cat brokenhibe2_
            on cats1_.cats_id=brokenhibe2_.id,
        city brokenhibe3_
    where
        brokenhibe0_.location_id=brokenhibe3_.id
        and brokenhibe3_.name='Anytown'
        and brokenhibe2_2_.meanness>5
2006-03-22 15:18:18,215 DEBUG [null main] jdbc.AbstractBatcher (AbstractBatcher.java:424) - preparing statement
2006-03-22 15:18:18,237 DEBUG [null main] jdbc.AbstractBatcher (AbstractBatcher.java:319) - about to close PreparedStatement (open PreparedStatements: 1, globally: 1)
2006-03-22 15:18:18,239 DEBUG [null main] jdbc.AbstractBatcher (AbstractBatcher.java:470) - closing statement
2006-03-22 15:18:18,252 DEBUG [null main] util.JDBCExceptionReporter (JDBCExceptionReporter.java:63) - could not execute query [select brokenhibe3_.state as col_0_0_ from pound brokenhibe0_ inner join pound_cat cats1_ on brokenhibe0_.id=cats1_.pound_id inner join cat brokenhibe2_ on cats1_.cats_id=brokenhibe2_.id, city brokenhibe3_ where brokenhibe0_.location_id=brokenhibe3_.id and brokenhibe3_.name='Anytown' and brokenhibe2_2_.meanness>5]
org.postgresql.util.PSQLException: ERROR: missing FROM-clause entry for table "brokenhibe2_2_"
   at org.postgresql.core.v3.QueryExecutorImpl.receiveErrorResponse(QueryExecutorImpl.java:1512)
   at org.postgresql.core.v3.QueryExecutorImpl.processResults(QueryExecutorImpl.java:1297)
   at org.postgresql.core.v3.QueryExecutorImpl.execute(QueryExecutorImpl.java:188)
   at org.postgresql.jdbc2.AbstractJdbc2Statement.execute(AbstractJdbc2Statement.java:437)
   at org.postgresql.jdbc2.AbstractJdbc2Statement.executeWithFlags(AbstractJdbc2Statement.java:353)
   at org.postgresql.jdbc2.AbstractJdbc2Statement.executeQuery(AbstractJdbc2Statement.java:257)
   at org.hibernate.jdbc.AbstractBatcher.getResultSet(AbstractBatcher.java:139)
   at org.hibernate.loader.Loader.getResultSet(Loader.java:1669)
   at org.hibernate.loader.Loader.doQuery(Loader.java:662)
   at org.hibernate.loader.Loader.doQueryAndInitializeNonLazyCollections(Loader.java:224)
   at org.hibernate.loader.Loader.doList(Loader.java:2145)
   at org.hibernate.loader.Loader.listIgnoreQueryCache(Loader.java:2029)
   at org.hibernate.loader.Loader.list(Loader.java:2024)
   at org.hibernate.loader.hql.QueryLoader.list(QueryLoader.java:375)
   at org.hibernate.hql.ast.QueryTranslatorImpl.list(QueryTranslatorImpl.java:308)
   at org.hibernate.engine.query.HQLQueryPlan.performList(HQLQueryPlan.java:153)
   at org.hibernate.impl.SessionImpl.list(SessionImpl.java:1106)
   at org.hibernate.impl.QueryImpl.list(QueryImpl.java:79)
   at com.i2rd.occasio.test.BrokenHibernateDowncast.main(BrokenHibernateDowncast.java:181)
2006-03-22 15:18:18,253 WARN  [null main] util.JDBCExceptionReporter (JDBCExceptionReporter.java:71) - SQL Error: 0, SQLState: 42P01
2006-03-22 15:18:18,254 ERROR [null main] util.JDBCExceptionReporter (JDBCExceptionReporter.java:72) - ERROR: missing FROM-clause entry for table "brokenhibe2_2_"
2006-03-22 15:18:18,255 DEBUG [null main] jdbc.JDBCContext (JDBCContext.java:217) - after autocommit
2006-03-22 15:18:18,255 DEBUG [null main] jdbc.ConnectionManager (ConnectionManager.java:296) - transaction completed on session with on_close connection release mode; be sure to close the session to release JDBC resources!
Exception in thread "main" 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:2148)
   at org.hibernate.loader.Loader.listIgnoreQueryCache(Loader.java:2029)
   at org.hibernate.loader.Loader.list(Loader.java:2024)
   at org.hibernate.loader.hql.QueryLoader.list(QueryLoader.java:375)
   at org.hibernate.hql.ast.QueryTranslatorImpl.list(QueryTranslatorImpl.java:308)
   at org.hibernate.engine.query.HQLQueryPlan.performList(HQLQueryPlan.java:153)
   at org.hibernate.impl.SessionImpl.list(SessionImpl.java:1106)
   at org.hibernate.impl.QueryImpl.list(QueryImpl.java:79)
   at com.i2rd.occasio.test.BrokenHibernateDowncast.main(BrokenHibernateDowncast.java:181)
Caused by: org.postgresql.util.PSQLException: ERROR: missing FROM-clause entry for table "brokenhibe2_2_"
   at org.postgresql.core.v3.QueryExecutorImpl.receiveErrorResponse(QueryExecutorImpl.java:1512)
   at org.postgresql.core.v3.QueryExecutorImpl.processResults(QueryExecutorImpl.java:1297)
   at org.postgresql.core.v3.QueryExecutorImpl.execute(QueryExecutorImpl.java:188)
   at org.postgresql.jdbc2.AbstractJdbc2Statement.execute(AbstractJdbc2Statement.java:437)
   at org.postgresql.jdbc2.AbstractJdbc2Statement.executeWithFlags(AbstractJdbc2Statement.java:353)
   at org.postgresql.jdbc2.AbstractJdbc2Statement.executeQuery(AbstractJdbc2Statement.java:257)
   at org.hibernate.jdbc.AbstractBatcher.getResultSet(AbstractBatcher.java:139)
   at org.hibernate.loader.Loader.getResultSet(Loader.java:1669)
   at org.hibernate.loader.Loader.doQuery(Loader.java:662)
   at org.hibernate.loader.Loader.doQueryAndInitializeNonLazyCollections(Loader.java:224)
   at org.hibernate.loader.Loader.doList(Loader.java:2145)
   ... 8 more
Code:


Top
 Profile  
 
Display posts from previous:  Sort by  
Forum locked This topic is locked, you cannot edit posts or make further replies.  [ 1 post ] 

All times are UTC - 5 hours [ DST ]


You cannot post new topics in this forum
You cannot reply to topics in this forum
You cannot edit your posts in this forum
You cannot delete your posts in this forum

Search for:
© Copyright 2014, Red Hat Inc. All rights reserved. JBoss and Hibernate are registered trademarks and servicemarks of Red Hat, Inc.