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: Inheritance problem
PostPosted: Mon Sep 22, 2008 2:30 pm 
Newbie

Joined: Mon Sep 22, 2008 11:07 am
Posts: 1
Hello, I have the following inheritance:

Image

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.


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.