Hello, I have the following inheritance:
The problem is that a Manager can also be a Director, and when that happens I'm getting an org.hibernate.WrongClassException.
I'm testing the query with Hibernate Tools and the HQL and generated query is:
Code:
SELECT DISTINCT m FROM Manager m LEFT JOIN m.foos
WHERE m.id = :userId
The generated query is:
Code:
select
distinct manager0_.id as id1_,
manager0_1_.addressLine1 as addressL2_1_,
manager0_1_.userName as userName1_,
from
Manager manager0_
inner join
User manager0_1_
on manager0_.id=manager0_1_.id
left outer join
foos_manager foos1_
on manager0_.id=foos1_.managers_id
left outer join
foo foo2_
on foos1_.foos_id=foo2_.id
where
manager0_1_.id=?
But when I run the query from the application:
Code:
Query query = null;
query = transaction.getEntityManager().createQuery("SELECT DISTINCT m FROM Manager m LEFT JOIN m.foos WHERE m.id = :userId");
query.setParameter("organizationId", organizationId);
List<Manager> queryCollection = query.getResultList();
This is the generated query:
Code:
select
user0_.id as id1_1_,
user0_.userName as userName1_1_,
user0_.addressLine1 as address16_1_1_,
case
when user0_1_.id is not null then 1
when user0_2_.id is not null then 2
when user0_.id is not null then 0
end as clazz_1_,
from
User user0_
left outer join
Director user0_1_
on user0_.id=user0_1_.id
left outer join
Manager user0_2_
on user0_.id=user0_2_.id
where
user0_.id=?
Hibernate version: Hibernate EntityManager 3.2.0.CR1, Hibernate Annotations 3.2.0.CR1, Hibernate 3.2 cr2. We are using JPA: ejb3-persistence
Full stack trace of any exception that occurs:
javax.persistence.PersistenceException: org.hibernate.WrongClassException: Object with id: 495 was not of the specified subclass: com.foo.boo.dataaccessservice.data.Manager (loaded object was of wrong class)
at org.hibernate.ejb.AbstractEntityManagerImpl.throwPersistenceException(AbstractEntityManagerImpl.java:567)
at org.hibernate.ejb.QueryImpl.getResultList(QueryImpl.java:56)
at com.foo.boo.dataaccessservice.datamanager.FooManager.getOrgManagers(FooManager.java:133)
at com.foo.boo.struts.utils.FilteredCollections.getManagersWithOneFooEach(FilteredCollections.java:519)
at com.foo.boo.struts.actions.sport.PrepareFooManagerListAction.handleEvent(PrepareFooManagerListAction.java:83)
at com.foo.boo.struts.actions.AbstractAction.handleAction(AbstractAction.java:101)
at com.foo.boo.struts.actions.DataAccessServiceAction.execute(DataAccessServiceAction.java:50)
at org.apache.struts.action.RequestProcessor.processActionPerform(RequestProcessor.java:484)
at org.apache.struts.action.RequestProcessor.process(RequestProcessor.java:274)
at com.foo.boo.struts.actions.FOOReqProcessor.process(FOOReqProcessor.java:72)
at org.apache.struts.action.ActionServlet.process(ActionServlet.java:1482)
at org.apache.struts.action.ActionServlet.doPost(ActionServlet.java:525)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:710)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:803)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:269)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:188)
at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:213)
at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:174)
at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:525)
at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:127)
at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:117)
at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:108)
at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:174)
at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:874)
at org.apache.coyote.http11.Http11BaseProtocol$Http11ConnectionHandler.processConnection(Http11BaseProtocol.java:665)
at org.apache.tomcat.util.net.PoolTcpEndpoint.processSocket(PoolTcpEndpoint.java:528)
at org.apache.tomcat.util.net.LeaderFollowerWorkerThread.runIt(LeaderFollowerWorkerThread.java:81)
at org.apache.tomcat.util.threads.ThreadPool$ControlRunnable.run(ThreadPool.java:689)
at java.lang.Thread.run(Unknown Source)
Caused by: org.hibernate.WrongClassException: Object with id: 495 was not of the specified subclass: com.foo.boo.dataaccessservice.data.Manager (loaded object was of wrong class)
at org.hibernate.loader.Loader.instanceAlreadyLoaded(Loader.java:1235)
at org.hibernate.loader.Loader.getRow(Loader.java:1186)
at org.hibernate.loader.Loader.getRowFromResultSet(Loader.java:569)
at org.hibernate.loader.Loader.doQuery(Loader.java:689)
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:392)
at org.hibernate.hql.ast.QueryTranslatorImpl.list(QueryTranslatorImpl.java:333)
at org.hibernate.engine.query.HQLQueryPlan.performList(HQLQueryPlan.java:172)
at org.hibernate.impl.SessionImpl.list(SessionImpl.java:1114)
at org.hibernate.impl.QueryImpl.list(QueryImpl.java:79)
at org.hibernate.ejb.QueryImpl.getResultList(QueryImpl.java:53)
... 27 more
Name and version of the database you are using: MySQL 5
Thanks in advance
Regards.