I have the following problem. It seems to me, it is the bug in Hibernate, but I am not sure. Please help.
EJB-QL:
SELECT ae.alert.name, ae.alert.priority, ae.readBy, ae.resource.id
FROM AlertEvent ae
WHERE ae.resource.id = :id0
Hibernate generates the following SQL:
Code:
select alert1_1_.name as col_0_0_, alert1_.priority as col_1_0_, alertevent0_.readBy_id as col_2_0_, alertevent0_.resource_id as col_3_0_, dispatcher3_.id as id3_, dispatcher3_1_.name as name3_, dispatcher3_1_.deleted as deleted3_, dispatcher3_1_.userName as userName3_, dispatcher3_1_.group_id as group6_3_, dispatcher3_1_.userPassword as userPass5_3_
from AlertEvents alertevent0_, Alerts alert1_ inner join ResourceConsumers alert1_1_ on alert1_.id=alert1_1_.id inner join Dispatchers dispatcher3_ on alertevent0_.readBy_id=dispatcher3_.id inner join Users dispatcher3_1_ on dispatcher3_.id=dispatcher3_1_.id
where alertevent0_.alert_id=alert1_.id
and alertevent0_.resource_id=?
SQL is invalid for PostgreSQL 8.1 and MySQL 5.0. For Oracle 10, SQL is valid, but it returns wrong results.
Here is the message from PostgreSQL:
invalid reference to FROM-clause entry for table "alertevent0_"
The problem is that SQL has to be generated like this (different order of inner joins):
Code:
select alert1_1_.name as col_0_0_, alert1_.priority as col_1_0_, alertevent0_.readBy_id as col_2_0_, alertevent0_.resource_id as col_3_0_, dispatcher3_.id as id3_, dispatcher3_1_.name as name3_, dispatcher3_1_.deleted as deleted3_, dispatcher3_1_.userName as userName3_, dispatcher3_1_.group_id as group6_3_, dispatcher3_1_.userPassword as userPass5_3_
from AlertEvents alertevent0_ [b]inner join Dispatchers dispatcher3_ on alertevent0_.readBy_id=dispatcher3_.id[/b] inner join Users dispatcher3_1_ on dispatcher3_.id=dispatcher3_1_.id, Alerts alert1_ inner join ResourceConsumers alert1_1_ on alert1_.id=alert1_1_.id
where alertevent0_.alert_id=alert1_.id
and alertevent0_.resource_id=?
I am using
NEW Hibernate 3.2.1 and Annotations 3.2.0 and EntityManager 3.2.0
The problem was also in Hibernate 3.2.0.
Here is the stack trace:
javax.persistence.PersistenceException: org.hibernate.exception.SQLGrammarException: could not execute query
at org.hibernate.ejb.AbstractEntityManagerImpl.throwPersistenceException(AbstractEntityManagerImpl.java:647)
at org.hibernate.ejb.QueryImpl.getResultList(QueryImpl.java:73)
at com.gcware.itistrack.services.ReportService.run(ReportService.java:531)
at com.gcware.itistrack.services.delegates.ReportServiceDelegate.run(ReportServiceDelegate.java:166)
at com.gcware.itistrack.services.ReportTest.runAlert(ReportTest.java:317)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
at java.lang.reflect.Method.invoke(Method.java:585)
at org.junit.internal.runners.TestMethodRunner.executeMethodBody(TestMethodRunner.java:99)
at org.junit.internal.runners.TestMethodRunner.runUnprotected(TestMethodRunner.java:81)
at org.junit.internal.runners.BeforeAndAfterRunner.runProtected(BeforeAndAfterRunner.java:34)
at org.junit.internal.runners.TestMethodRunner.runMethod(TestMethodRunner.java:75)
at org.junit.internal.runners.TestMethodRunner.run(TestMethodRunner.java:45)
at org.junit.internal.runners.TestClassMethodsRunner.invokeTestMethod(TestClassMethodsRunner.java:71)
at org.junit.internal.runners.TestClassMethodsRunner.run(TestClassMethodsRunner.java:35)
at org.junit.internal.runners.TestClassRunner$1.runUnprotected(TestClassRunner.java:42)
at org.junit.internal.runners.BeforeAndAfterRunner.runProtected(BeforeAndAfterRunner.java:34)
at org.junit.internal.runners.TestClassRunner.run(TestClassRunner.java:52)
at org.eclipse.jdt.internal.junit4.runner.JUnit4TestReference.run(JUnit4TestReference.java:38)
at org.eclipse.jdt.internal.junit.runner.TestExecution.run(TestExecution.java:38)
at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:460)
at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:673)
at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.run(RemoteTestRunner.java:386)
at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.main(RemoteTestRunner.java:196)
Caused by: 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:2214)
at org.hibernate.loader.Loader.listIgnoreQueryCache(Loader.java:2095)
at org.hibernate.loader.Loader.list(Loader.java:2090)
at org.hibernate.loader.hql.QueryLoader.list(QueryLoader.java:388)
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)
at org.hibernate.ejb.QueryImpl.getResultList(QueryImpl.java:64)
... 23 more
Caused by: org.postgresql.util.PSQLException: ERROR: invalid reference to FROM-clause entry for table "alertevent0_"
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:186)
at org.hibernate.loader.Loader.getResultSet(Loader.java:1778)
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:2211)
... 31 more
Code:
If I remove "ae.readBy" from SELECT than SQL is valid.
select alert1_1_.name as col_0_0_, alert1_.priority as col_1_0_, alertevent0_.resource_id as col_2_0_ from AlertEvents alertevent0_, Alerts alert1_ inner join ResourceConsumers alert1_1_ on alert1_.id=alert1_1_.id where alertevent0_.alert_id=alert1_.id and alertevent0_.resource_id=?
Now here is the list of my relations, which are important for this problem
AlertEvent => Resource (@ManyToOne)
AlertEvent => Alert (@ManyToOne)
AlertEvent => Dispatcher (@ManyToOne)
Alert is subclass of ResourceConsumer (@Inheritance(strategy=JOINED))
Dispatcher is subclass of User (@Inheritance(strategy=JOINED))
Name and Priority are not relations.
This issue seems to be similar to the bug HHH-1631.
And finally full log:
DEBUG 18-11 23:54:18,000 (QueryPlanCache.java:getHQLQueryPlan:70) - unable to locate HQL query plan in cache; generating (SELECT ae.alert.name, ae.alert.priority, ae.readBy, ae.resource.id FROM AlertEvent ae WHERE ae.resource.id = :id0)
DEBUG 18-11 23:54:18,000 (QueryTranslatorImpl.java:parse:246) - parse() - HQL: SELECT ae.alert.name, ae.alert.priority, ae.readBy, ae.resource.id FROM com.gcware.itistrack.alerting.AlertEvent ae WHERE ae.resource.id = :id0
DEBUG 18-11 23:54:18,015 (QueryTranslatorImpl.java:showHqlAst:266) - --- HQL AST ---
\-[QUERY] 'query'
+-[SELECT_FROM] 'SELECT_FROM'
| +-[FROM] 'FROM'
| | \-[RANGE] 'RANGE'
| | +-[DOT] '.'
| | | +-[DOT] '.'
| | | | +-[DOT] '.'
| | | | | +-[DOT] '.'
| | | | | | +-[IDENT] 'com'
| | | | | | \-[IDENT] 'gcware'
| | | | | \-[IDENT] 'itistrack'
| | | | \-[IDENT] 'alerting'
| | | \-[IDENT] 'AlertEvent'
| | \-[ALIAS] 'ae'
| \-[SELECT] 'SELECT'
| +-[DOT] '.'
| | +-[DOT] '.'
| | | +-[IDENT] 'ae'
| | | \-[IDENT] 'alert'
| | \-[IDENT] 'name'
| +-[DOT] '.'
| | +-[DOT] '.'
| | | +-[IDENT] 'ae'
| | | \-[IDENT] 'alert'
| | \-[IDENT] 'priority'
| +-[DOT] '.'
| | +-[IDENT] 'ae'
| | \-[IDENT] 'readBy'
| \-[DOT] '.'
| +-[DOT] '.'
| | +-[IDENT] 'ae'
| | \-[IDENT] 'resource'
| \-[IDENT] 'id'
\-[WHERE] 'WHERE'
\-[EQ] '='
+-[DOT] '.'
| +-[DOT] '.'
| | +-[IDENT] 'ae'
| | \-[IDENT] 'resource'
| \-[IDENT] 'id'
\-[COLON] ':'
\-[IDENT] 'id0'
DEBUG 18-11 23:54:18,031 (ErrorCounter.java:throwQueryException:68) - throwQueryException() : no errors
DEBUG 18-11 23:54:18,031 (HqlSqlBaseWalker.java:beforeStatement:111) - select << begin [level=1, statement=select]
DEBUG 18-11 23:54:18,031 (FromElement.java:doInitialize:109) - FromClause{level=1} : com.gcware.itistrack.alerting.AlertEvent (ae) -> alertevent0_
DEBUG 18-11 23:54:18,031 (FromReferenceNode.java:setResolved:51) - Resolved : ae -> alertevent0_.id
DEBUG 18-11 23:54:18,031 (FromElement.java:handlePropertyBeingDereferenced:532) - handling property dereference [com.gcware.itistrack.alerting.AlertEvent (ae) -> alert (class)]
DEBUG 18-11 23:54:18,031 (DotNode.java:getDataType:507) - getDataType() : alert -> org.hibernate.type.ManyToOneType(com.gcware.itistrack.alerting.Alert)
DEBUG 18-11 23:54:18,031 (DotNode.java:dereferenceEntityJoin:329) - dereferenceEntityJoin() : generating join for alert in com.gcware.itistrack.alerting.AlertEvent {no alias} parent = [ ( . ( . alertevent0_.id alert ) name ) ]
DEBUG 18-11 23:54:18,031 (FromElement.java:doInitialize:109) - FromClause{level=1} : com.gcware.itistrack.alerting.Alert (no alias) -> alert1_
DEBUG 18-11 23:54:18,031 (FromClause.java:addJoinByPathMap:233) - addJoinByPathMap() : ae.alert -> Alerts alert1_
DEBUG 18-11 23:54:18,031 (FromElementFactory.java:createEntityJoin:245) - createEntityJoin() : Implied multi-table entity join
DEBUG 18-11 23:54:18,031 (FromReferenceNode.java:setResolved:51) - Resolved : ae.alert -> alertevent0_.alert_id
DEBUG 18-11 23:54:18,031 (FromElement.java:handlePropertyBeingDereferenced:532) - handling property dereference [com.gcware.itistrack.alerting.Alert (null) -> name (superclass)]
DEBUG 18-11 23:54:18,031 (DotNode.java:getDataType:507) - getDataType() : name -> org.hibernate.type.StringType@f12b72
DEBUG 18-11 23:54:18,031 (FromReferenceNode.java:setResolved:51) - Resolved : ae.alert.name -> alert1_1_.name
DEBUG 18-11 23:54:18,031 (FromElement.java:handlePropertyBeingDereferenced:532) - handling property dereference [com.gcware.itistrack.alerting.Alert (null) -> name (superclass)]
DEBUG 18-11 23:54:18,031 (FromElement.java:handlePropertyBeingDereferenced:532) - handling property dereference [com.gcware.itistrack.alerting.AlertEvent (ae) -> alert (class)]
DEBUG 18-11 23:54:18,031 (FromReferenceNode.java:setResolved:51) - Resolved : ae -> alertevent0_.id
DEBUG 18-11 23:54:18,031 (FromElement.java:handlePropertyBeingDereferenced:532) - handling property dereference [com.gcware.itistrack.alerting.AlertEvent (ae) -> alert (class)]
DEBUG 18-11 23:54:18,031 (DotNode.java:getDataType:507) - getDataType() : alert -> org.hibernate.type.ManyToOneType(com.gcware.itistrack.alerting.Alert)
DEBUG 18-11 23:54:18,031 (DotNode.java:dereferenceEntityJoin:329) - dereferenceEntityJoin() : generating join for alert in com.gcware.itistrack.alerting.AlertEvent {no alias} parent = [ ( . ( . alertevent0_.id alert ) priority ) ]
DEBUG 18-11 23:54:18,046 (FromReferenceNode.java:setResolved:51) - Resolved : ae.alert -> alertevent0_.alert_id
DEBUG 18-11 23:54:18,046 (FromElement.java:handlePropertyBeingDereferenced:532) - handling property dereference [com.gcware.itistrack.alerting.Alert (null) -> priority (class)]
DEBUG 18-11 23:54:18,046 (DotNode.java:getDataType:507) - getDataType() : priority -> org.hibernate.type.CustomType@15b6aad
DEBUG 18-11 23:54:18,046 (FromReferenceNode.java:setResolved:51) - Resolved : ae.alert.priority -> alert1_.priority
DEBUG 18-11 23:54:18,046 (FromElement.java:handlePropertyBeingDereferenced:532) - handling property dereference [com.gcware.itistrack.alerting.Alert (null) -> priority (class)]
DEBUG 18-11 23:54:18,046 (FromElement.java:handlePropertyBeingDereferenced:532) - handling property dereference [com.gcware.itistrack.alerting.AlertEvent (ae) -> alert (class)]
DEBUG 18-11 23:54:18,046 (FromReferenceNode.java:setResolved:51) - Resolved : ae -> alertevent0_.id
DEBUG 18-11 23:54:18,046 (FromElement.java:handlePropertyBeingDereferenced:532) - handling property dereference [com.gcware.itistrack.alerting.AlertEvent (ae) -> readBy (class)]
DEBUG 18-11 23:54:18,046 (DotNode.java:getDataType:507) - getDataType() : readBy -> org.hibernate.type.ManyToOneType(com.gcware.itistrack.core.Dispatcher)
DEBUG 18-11 23:54:18,046 (DotNode.java:dereferenceEntityJoin:329) - dereferenceEntityJoin() : generating join for readBy in com.gcware.itistrack.alerting.AlertEvent {no alias} parent = [ {null} ]
DEBUG 18-11 23:54:18,046 (FromElement.java:doInitialize:109) - FromClause{level=1} : com.gcware.itistrack.core.Dispatcher (no alias) -> dispatcher3_
DEBUG 18-11 23:54:18,046 (FromClause.java:addJoinByPathMap:233) - addJoinByPathMap() : ae.readBy -> Dispatchers dispatcher3_
DEBUG 18-11 23:54:18,046 (FromReferenceNode.java:setResolved:51) - Resolved : ae.readBy -> alertevent0_.readBy_id
DEBUG 18-11 23:54:18,046 (FromElement.java:handlePropertyBeingDereferenced:532) - handling property dereference [com.gcware.itistrack.alerting.AlertEvent (ae) -> readBy (class)]
DEBUG 18-11 23:54:18,046 (FromReferenceNode.java:setResolved:51) - Resolved : ae -> alertevent0_.id
DEBUG 18-11 23:54:18,046 (FromElement.java:handlePropertyBeingDereferenced:532) - handling property dereference [com.gcware.itistrack.alerting.AlertEvent (ae) -> resource (class)]
DEBUG 18-11 23:54:18,046 (DotNode.java:getDataType:507) - getDataType() : resource -> org.hibernate.type.ManyToOneType(com.gcware.itistrack.core.Resource)
DEBUG 18-11 23:54:18,046 (DotNode.java:dereferenceEntityIdentifier:463) - dereferenceShortcut() : property id in com.gcware.itistrack.alerting.AlertEvent does not require a join.
DEBUG 18-11 23:54:18,046 (DotNode.java:setPropertyNameAndPath:487) - Unresolved property path is now 'resource.id'
DEBUG 18-11 23:54:18,046 (FromReferenceNode.java:setResolved:51) - Resolved : ae.resource -> alertevent0_.resource_id
DEBUG 18-11 23:54:18,046 (FromElement.java:handlePropertyBeingDereferenced:532) - handling property dereference [com.gcware.itistrack.alerting.AlertEvent (ae) -> id (class)]
DEBUG 18-11 23:54:18,046 (DotNode.java:getDataType:507) - getDataType() : resource.id -> org.hibernate.type.LongType@1f1e666
DEBUG 18-11 23:54:18,046 (FromReferenceNode.java:setResolved:51) - Resolved : ae.resource.id -> alertevent0_.resource_id
DEBUG 18-11 23:54:18,046 (FromElement.java:handlePropertyBeingDereferenced:532) - handling property dereference [com.gcware.itistrack.alerting.AlertEvent (ae) -> id (class)]
DEBUG 18-11 23:54:18,046 (FromElement.java:handlePropertyBeingDereferenced:532) - handling property dereference [com.gcware.itistrack.alerting.AlertEvent (ae) -> resource (class)]
DEBUG 18-11 23:54:18,046 (FromReferenceNode.java:setResolved:51) - Resolved : ae -> alertevent0_.id
DEBUG 18-11 23:54:18,046 (FromElement.java:handlePropertyBeingDereferenced:532) - handling property dereference [com.gcware.itistrack.alerting.AlertEvent (ae) -> resource (class)]
DEBUG 18-11 23:54:18,046 (DotNode.java:getDataType:507) - getDataType() : resource -> org.hibernate.type.ManyToOneType(com.gcware.itistrack.core.Resource)
DEBUG 18-11 23:54:18,046 (DotNode.java:dereferenceEntityIdentifier:463) - dereferenceShortcut() : property id in com.gcware.itistrack.alerting.AlertEvent does not require a join.
DEBUG 18-11 23:54:18,062 (DotNode.java:setPropertyNameAndPath:487) - Unresolved property path is now 'resource.id'
DEBUG 18-11 23:54:18,062 (FromReferenceNode.java:setResolved:51) - Resolved : ae.resource -> alertevent0_.resource_id
DEBUG 18-11 23:54:18,062 (FromElement.java:handlePropertyBeingDereferenced:532) - handling property dereference [com.gcware.itistrack.alerting.AlertEvent (ae) -> id (class)]
DEBUG 18-11 23:54:18,062 (DotNode.java:getDataType:507) - getDataType() : resource.id -> org.hibernate.type.LongType@1f1e666
DEBUG 18-11 23:54:18,062 (FromReferenceNode.java:setResolved:51) - Resolved : ae.resource.id -> alertevent0_.resource_id
DEBUG 18-11 23:54:18,062 (HqlSqlBaseWalker.java:beforeStatementCompletion:117) - select : finishing up [level=1, statement=select]
DEBUG 18-11 23:54:18,062 (HqlSqlWalker.java:processQuery:508) - processQuery() : ( SELECT ( {select clause} ( alert1_1_.name ( alertevent0_.alert_id alertevent0_.id alert ) name ) ( alert1_.priority ( alertevent0_.alert_id alertevent0_.id alert ) priority ) ( alertevent0_.readBy_id alertevent0_.id readBy ) ( alertevent0_.resource_id ( alertevent0_.resource_id alertevent0_.id resource ) id ) ) ( FromClause{level=1} ( AlertEvents alertevent0_ Alerts alert1_ Dispatchers dispatcher3_ ) ) ( WHERE ( = ( alertevent0_.resource_id ( alertevent0_.resource_id alertevent0_.id resource ) id ) ? ) ) )
DEBUG 18-11 23:54:18,062 (JoinProcessor.java:addJoinNodes:148) - Using FROM fragment [AlertEvents alertevent0_]
DEBUG 18-11 23:54:18,062 (JoinProcessor.java:addJoinNodes:148) - Using FROM fragment [Alerts alert1_ inner join ResourceConsumers alert1_1_ on alert1_.id=alert1_1_.id]
DEBUG 18-11 23:54:18,062 (SyntheticAndFactory.java:addWhereFragment:58) - Using WHERE fragment [alertevent0_.alert_id=alert1_.id]
DEBUG 18-11 23:54:18,062 (JoinProcessor.java:addJoinNodes:148) - Using FROM fragment [inner join Dispatchers dispatcher3_ on alertevent0_.readBy_id=dispatcher3_.id inner join Users dispatcher3_1_ on dispatcher3_.id=dispatcher3_1_.id]
DEBUG 18-11 23:54:18,062 (HqlSqlBaseWalker.java:afterStatementCompletion:123) - select >> end [level=1, statement=select]
DEBUG 18-11 23:54:18,062 (QueryTranslatorImpl.java:analyze:232) - --- SQL AST ---
\-[SELECT] QueryNode: 'SELECT' querySpaces (ResourceConsumers,AlertEvents,Alerts,Users,Dispatchers)
+-[SELECT_CLAUSE] SelectClause: '{select clause}'
| +-[DOT] DotNode: 'alert1_1_.name' {propertyName=name,dereferenceType=4,propertyPath=name,path=ae.alert.name,tableAlias=alert1_,className=com.gcware.itistrack.alerting.Alert,classAlias=null}
| | +-[DOT] DotNode: 'alertevent0_.alert_id' {propertyName=alert,dereferenceType=1,propertyPath=alert,path=ae.alert,tableAlias=alert1_,className=com.gcware.itistrack.alerting.Alert,classAlias=null}
| | | +-[ALIAS_REF] IdentNode: 'alertevent0_.id' {alias=ae, className=com.gcware.itistrack.alerting.AlertEvent, tableAlias=alertevent0_}
| | | \-[IDENT] IdentNode: 'alert' {originalText=alert}
| | \-[IDENT] IdentNode: 'name' {originalText=name}
| +-[SELECT_COLUMNS] SqlNode: ' as col_0_0_'
| +-[DOT] DotNode: 'alert1_.priority' {propertyName=priority,dereferenceType=4,propertyPath=priority,path=ae.alert.priority,tableAlias=alert1_,className=com.gcware.itistrack.alerting.Alert,classAlias=null}
| | +-[DOT] DotNode: 'alertevent0_.alert_id' {propertyName=alert,dereferenceType=1,propertyPath=alert,path=ae.alert,tableAlias=alert1_,className=com.gcware.itistrack.alerting.Alert,classAlias=null}
| | | +-[ALIAS_REF] IdentNode: 'alertevent0_.id' {alias=ae, className=com.gcware.itistrack.alerting.AlertEvent, tableAlias=alertevent0_}
| | | \-[IDENT] IdentNode: 'alert' {originalText=alert}
| | \-[IDENT] IdentNode: 'priority' {originalText=priority}
| +-[SELECT_COLUMNS] SqlNode: ' as col_1_0_'
| +-[DOT] DotNode: 'alertevent0_.readBy_id' {propertyName=readBy,dereferenceType=1,propertyPath=readBy,path=ae.readBy,tableAlias=dispatcher3_,className=com.gcware.itistrack.core.Dispatcher,classAlias=null}
| | +-[ALIAS_REF] IdentNode: 'alertevent0_.id' {alias=ae, className=com.gcware.itistrack.alerting.AlertEvent, tableAlias=alertevent0_}
| | \-[IDENT] IdentNode: 'readBy' {originalText=readBy}
| +-[SELECT_COLUMNS] SqlNode: ' as col_2_0_'
| +-[DOT] DotNode: 'alertevent0_.resource_id' {propertyName=id,dereferenceType=4,propertyPath=resource.id,path=ae.resource.id,tableAlias=alertevent0_,className=com.gcware.itistrack.alerting.AlertEvent,classAlias=ae}
| | +-[DOT] DotNode: 'alertevent0_.resource_id' {propertyName=id,dereferenceType=ROOT_LEVEL,propertyPath=resource.id,path=ae.resource,tableAlias=alertevent0_,className=com.gcware.itistrack.alerting.AlertEvent,classAlias=ae}
| | | +-[ALIAS_REF] IdentNode: 'alertevent0_.id' {alias=ae, className=com.gcware.itistrack.alerting.AlertEvent, tableAlias=alertevent0_}
| | | \-[IDENT] IdentNode: 'resource' {originalText=resource}
| | \-[IDENT] IdentNode: 'id' {originalText=id}
| +-[SELECT_COLUMNS] SqlNode: ' as col_3_0_'
| +-[SQL_TOKEN] SqlFragment: 'dispatcher3_.id as id3_'
| \-[SQL_TOKEN] SqlFragment: 'dispatcher3_1_.name as name3_, dispatcher3_1_.deleted as deleted3_, dispatcher3_1_.userName as userName3_, dispatcher3_1_.group_id as group6_3_, dispatcher3_1_.userPassword as userPass5_3_'
+-[FROM] FromClause: 'FROM' FromClause{level=1, fromElementCounter=3, fromElements=3, fromElementByClassAlias=[null, ae], fromElementByTableAlias=[dispatcher3_, alertevent0_, alert1_], fromElementsByPath=[ae.readBy, ae.alert], collectionJoinFromElementsByPath=[], impliedElements=[]}
| \-[FROM_FRAGMENT] FromElement: 'AlertEvents alertevent0_' FromElement{explicit,not a collection join,not a fetch join,fetch non-lazy properties,classAlias=ae,role=null,tableName=AlertEvents,tableAlias=alertevent0_,origin=null,colums={,className=com.gcware.itistrack.alerting.AlertEvent}}
| +-[FROM_FRAGMENT] ImpliedFromElement: 'Alerts alert1_ inner join ResourceConsumers alert1_1_ on alert1_.id=alert1_1_.id' ImpliedFromElement{implied,not a collection join,not a fetch join,fetch non-lazy properties,classAlias=null,role=null,tableName=Alerts,tableAlias=alert1_,origin=AlertEvents alertevent0_,colums={alertevent0_.alert_id ,className=com.gcware.itistrack.alerting.Alert}}
| \-[JOIN_FRAGMENT] FromElement: 'inner join Dispatchers dispatcher3_ on alertevent0_.readBy_id=dispatcher3_.id inner join Users dispatcher3_1_ on dispatcher3_.id=dispatcher3_1_.id' FromElement{explicit,not a collection join,not a fetch join,fetch non-lazy properties,classAlias=null,role=null,tableName=Dispatchers,tableAlias=dispatcher3_,origin=AlertEvents alertevent0_,colums={alertevent0_.readBy_id ,className=com.gcware.itistrack.core.Dispatcher}}
\-[WHERE] SqlNode: 'WHERE'
+-[THETA_JOINS] SqlNode: '{theta joins}'
| \-[SQL_TOKEN] SqlFragment: 'alertevent0_.alert_id=alert1_.id'
\-[EQ] BinaryLogicOperatorNode: '='
+-[DOT] DotNode: 'alertevent0_.resource_id' {propertyName=id,dereferenceType=4,propertyPath=resource.id,path=ae.resource.id,tableAlias=alertevent0_,className=com.gcware.itistrack.alerting.AlertEvent,classAlias=ae}
| +-[DOT] DotNode: 'alertevent0_.resource_id' {propertyName=id,dereferenceType=ROOT_LEVEL,propertyPath=resource.id,path=ae.resource,tableAlias=alertevent0_,className=com.gcware.itistrack.alerting.AlertEvent,classAlias=ae}
| | +-[ALIAS_REF] IdentNode: 'alertevent0_.id' {alias=ae, className=com.gcware.itistrack.alerting.AlertEvent, tableAlias=alertevent0_}
| | \-[IDENT] IdentNode: 'resource' {originalText=resource}
| \-[IDENT] IdentNode: 'id' {originalText=id}
\-[NAMED_PARAM] ParameterNode: '?' {name=id0, expectedType=org.hibernate.type.LongType@1f1e666}
DEBUG 18-11 23:54:18,062 (ErrorCounter.java:throwQueryException:68) - throwQueryException() : no errors
DEBUG 18-11 23:54:18,078 (QueryTranslatorImpl.java:generate:216) - HQL: SELECT ae.alert.name, ae.alert.priority, ae.readBy, ae.resource.id FROM com.gcware.itistrack.alerting.AlertEvent ae WHERE ae.resource.id = :id0
DEBUG 18-11 23:54:18,078 (QueryTranslatorImpl.java:generate:217) - SQL: select alert1_1_.name as col_0_0_, alert1_.priority as col_1_0_, alertevent0_.readBy_id as col_2_0_, alertevent0_.resource_id as col_3_0_, dispatcher3_.id as id3_, dispatcher3_1_.name as name3_, dispatcher3_1_.deleted as deleted3_, dispatcher3_1_.userName as userName3_, dispatcher3_1_.group_id as group6_3_, dispatcher3_1_.userPassword as userPass5_3_ from AlertEvents alertevent0_, Alerts alert1_ inner join ResourceConsumers alert1_1_ on alert1_.id=alert1_1_.id inner join Dispatchers dispatcher3_ on alertevent0_.readBy_id=dispatcher3_.id inner join Users dispatcher3_1_ on dispatcher3_.id=dispatcher3_1_.id where alertevent0_.alert_id=alert1_.id and alertevent0_.resource_id=?
DEBUG 18-11 23:54:18,078 (ErrorCounter.java:throwQueryException:68) - throwQueryException() : no errors
DEBUG 18-11 23:54:18,078 (HQLQueryPlan.java:buildParameterMetadata:269) - HQL param location recognition took 0 mills (SELECT ae.alert.name, ae.alert.priority, ae.readBy, ae.resource.id FROM AlertEvent ae WHERE ae.resource.id = :id0)
DEBUG 18-11 23:54:18,078 (QueryPlanCache.java:getHQLQueryPlan:76) - located HQL query plan in cache (SELECT ae.alert.name, ae.alert.priority, ae.readBy, ae.resource.id FROM AlertEvent ae WHERE ae.resource.id = :id0)
DEBUG 18-11 23:54:18,140 (HQLQueryPlan.java:performList:150) - find: SELECT ae.alert.name, ae.alert.priority, ae.readBy, ae.resource.id FROM AlertEvent ae WHERE ae.resource.id = :id0
DEBUG 18-11 23:54:18,140 (QueryParameters.java:traceParameters:277) - named parameters: {id0=10001}
DEBUG 18-11 23:54:18,140 (AbstractBatcher.java:logOpenPreparedStatement:358) - about to open PreparedStatement (open PreparedStatements: 0, globally: 0)
DEBUG 18-11 23:54:18,140 (ConnectionManager.java:openConnection:415) - opening JDBC connection
DEBUG 18-11 23:54:18,156 (DriverManagerConnectionProvider.java:getConnection:93) - total checked-out connections: 0
DEBUG 18-11 23:54:18,156 (DriverManagerConnectionProvider.java:getConnection:99) - using pooled JDBC connection, pool size: 0
DEBUG 18-11 23:54:18,156 (AbstractBatcher.java:log:393) -
select
alert1_1_.name as col_0_0_,
alert1_.priority as col_1_0_,
alertevent0_.readBy_id as col_2_0_,
alertevent0_.resource_id as col_3_0_,
dispatcher3_.id as id3_,
dispatcher3_1_.name as name3_,
dispatcher3_1_.deleted as deleted3_,
dispatcher3_1_.userName as userName3_,
dispatcher3_1_.group_id as group6_3_,
dispatcher3_1_.userPassword as userPass5_3_
from
AlertEvents alertevent0_,
Alerts alert1_
inner join
ResourceConsumers alert1_1_
on alert1_.id=alert1_1_.id
inner join
Dispatchers dispatcher3_
on alertevent0_.readBy_id=dispatcher3_.id
inner join
Users dispatcher3_1_
on dispatcher3_.id=dispatcher3_1_.id
where
alertevent0_.alert_id=alert1_.id
and alertevent0_.resource_id=?
Hibernate:
select
alert1_1_.name as col_0_0_,
alert1_.priority as col_1_0_,
alertevent0_.readBy_id as col_2_0_,
alertevent0_.resource_id as col_3_0_,
dispatcher3_.id as id3_,
dispatcher3_1_.name as name3_,
dispatcher3_1_.deleted as deleted3_,
dispatcher3_1_.userName as userName3_,
dispatcher3_1_.group_id as group6_3_,
dispatcher3_1_.userPassword as userPass5_3_
from
AlertEvents alertevent0_,
Alerts alert1_
inner join
ResourceConsumers alert1_1_
on alert1_.id=alert1_1_.id
inner join
Dispatchers dispatcher3_
on alertevent0_.readBy_id=dispatcher3_.id
inner join
Users dispatcher3_1_
on dispatcher3_.id=dispatcher3_1_.id
where
alertevent0_.alert_id=alert1_.id
and alertevent0_.resource_id=?
DEBUG 18-11 23:54:18,156 (AbstractBatcher.java:getPreparedStatement:476) - preparing statement
DEBUG 18-11 23:54:18,156 (NullableType.java:nullSafeSet:80) - binding '10001' to parameter: 1
DEBUG 18-11 23:54:18,156 (AbstractBatcher.java:logClosePreparedStatement:366) - about to close PreparedStatement (open PreparedStatements: 1, globally: 1)
DEBUG 18-11 23:54:18,156 (AbstractBatcher.java:closePreparedStatement:525) - closing statement
DEBUG 18-11 23:54:18,156 (ConnectionManager.java:aggressiveRelease:398) - aggressively releasing JDBC connection
DEBUG 18-11 23:54:18,156 (ConnectionManager.java:closeConnection:435) - releasing JDBC connection [ (open PreparedStatements: 0, globally: 0) (open ResultSets: 0, globally: 0)]
DEBUG 18-11 23:54:18,156 (DriverManagerConnectionProvider.java:closeConnection:129) - returning connection to pool, pool size: 1
DEBUG 18-11 23:54:18,218 (JDBCExceptionReporter.java:logExceptions:69) - could not execute query [select alert1_1_.name as col_0_0_, alert1_.priority as col_1_0_, alertevent0_.readBy_id as col_2_0_, alertevent0_.resource_id as col_3_0_, dispatcher3_.id as id3_, dispatcher3_1_.name as name3_, dispatcher3_1_.deleted as deleted3_, dispatcher3_1_.userName as userName3_, dispatcher3_1_.group_id as group6_3_, dispatcher3_1_.userPassword as userPass5_3_ from AlertEvents alertevent0_, Alerts alert1_ inner join ResourceConsumers alert1_1_ on alert1_.id=alert1_1_.id inner join Dispatchers dispatcher3_ on alertevent0_.readBy_id=dispatcher3_.id inner join Users dispatcher3_1_ on dispatcher3_.id=dispatcher3_1_.id where alertevent0_.alert_id=alert1_.id and alertevent0_.resource_id=?]
org.postgresql.util.PSQLException: ERROR: invalid reference to FROM-clause entry for table "alertevent0_"
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:186)
at org.hibernate.loader.Loader.getResultSet(Loader.java:1778)
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:2211)
at org.hibernate.loader.Loader.listIgnoreQueryCache(Loader.java:2095)
at org.hibernate.loader.Loader.list(Loader.java:2090)
at org.hibernate.loader.hql.QueryLoader.list(QueryLoader.java:388)
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)
at org.hibernate.ejb.QueryImpl.getResultList(QueryImpl.java:64)
at com.gcware.itistrack.services.ReportService.run(ReportService.java:531)
at com.gcware.itistrack.services.delegates.ReportServiceDelegate.run(ReportServiceDelegate.java:166)
at com.gcware.itistrack.services.ReportTest.runAlert(ReportTest.java:317)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
at java.lang.reflect.Method.invoke(Method.java:585)
at org.junit.internal.runners.TestMethodRunner.executeMethodBody(TestMethodRunner.java:99)
at org.junit.internal.runners.TestMethodRunner.runUnprotected(TestMethodRunner.java:81)
at org.junit.internal.runners.BeforeAndAfterRunner.runProtected(BeforeAndAfterRunner.java:34)
at org.junit.internal.runners.TestMethodRunner.runMethod(TestMethodRunner.java:75)
at org.junit.internal.runners.TestMethodRunner.run(TestMethodRunner.java:45)
at org.junit.internal.runners.TestClassMethodsRunner.invokeTestMethod(TestClassMethodsRunner.java:71)
at org.junit.internal.runners.TestClassMethodsRunner.run(TestClassMethodsRunner.java:35)
at org.junit.internal.runners.TestClassRunner$1.runUnprotected(TestClassRunner.java:42)
at org.junit.internal.runners.BeforeAndAfterRunner.runProtected(BeforeAndAfterRunner.java:34)
at org.junit.internal.runners.TestClassRunner.run(TestClassRunner.java:52)
at org.eclipse.jdt.internal.junit4.runner.JUnit4TestReference.run(JUnit4TestReference.java:38)
at org.eclipse.jdt.internal.junit.runner.TestExecution.run(TestExecution.java:38)
at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:460)
at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:673)
at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.run(RemoteTestRunner.java:386)
at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.main(RemoteTestRunner.java:196)
WARN 18-11 23:54:18,218 (JDBCExceptionReporter.java:logExceptions:77) - SQL Error: 0, SQLState: 42P01
ERROR 18-11 23:54:18,218 (JDBCExceptionReporter.java:logExceptions:78) - ERROR: invalid reference to FROM-clause entry for table "alertevent0_"
DEBUG 18-11 23:54:18,218 (JDBCContext.java:afterNontransactionalQuery:233) - after autocommit
DEBUG 18-11 23:54:18,218 (ConnectionManager.java:aggressiveRelease:398) - aggressively releasing JDBC connection
DEBUG 18-11 23:54:18,218 (SessionImpl.java:afterTransactionCompletion:422) - after transaction completion
DEBUG 18-11 23:54:18,218 (AbstractEntityManagerImpl.java:markAsRollback:417) - mark transaction for rollback
DEBUG 18-11 23:54:18,218 (SessionImpl.java:close:273) - closing session
DEBUG 18-11 23:54:18,218 (ConnectionManager.java:cleanup:369) - connection already null in cleanup : no action
INFO 18-11 23:54:18,234 (SessionFactoryImpl.java:close:767) - closing