-->
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.  [ 7 posts ] 
Author Message
 Post subject: Object with id: 1 was not of the specified subclass
PostPosted: Tue Mar 24, 2009 4:44 am 
Beginner
Beginner

Joined: Mon May 26, 2008 3:34 am
Posts: 31
Hello everyone,

I am getting an error while getting several lists of categories.

This si my Category.java (UserCategory, ArticleCategory, ResourceCategory and ProfileCategory extends from it):
Code:
        /** Serial version ID. */
   private static final long serialVersionUID = -9093525414764126719L;
   
   /** Category ID. */
   private int id = 0;
   
   /** Category title. */
   private String title = null;
   
   /** Category description. */
   private String description = null;
   
   /** Parent category. */
   private Category parentCategory;
   
   /** Child categories. */
   private Set<Category> childCategories = new HashSet<Category>();
   
   /** Creation date. */
   private Date creationDate = new Date();


This is my User.hbm (where i map my UserCategory):
Code:
<hibernate-mapping package="com.elnominal.model.user" auto-import="false">

<class name="User" table="elnominal_user" lazy="true">

   <id name="id" type="integer" column="id">
      <generator class="sequence">
         <param name="sequence">elnominal_user_id_seq</param>
      </generator>
   </id>

   <property name="login" type="string" column="login" length="50" not-null="true" unique="true"/>
   <property name="password" type="string" column="password" length="50" not-null="true"/>
   <property name="creationDate" column="creation_date" type="java.util.Date" update="false" not-null="true"/>   
   <property name="idActivationState" type="integer" column="id_activation_state" not-null="true"/>
   
   <many-to-one name="profile" cascade="all" class="com.elnominal.model.user.Profile" column="id_profile" not-null="true"/>
   <many-to-one name="rating" cascade="all" class="com.elnominal.model.rating.Rating" column="id_rating" not-null="true"/>
   <many-to-one name="userCategory" cascade="none" class="com.elnominal.model.category.UserCategory" column="id_category" not-null="true"/>

   <bag name="resourceList" cascade="all" inverse="true">
      <key column="id_user" not-null="true"/>
      <one-to-many class="com.elnominal.model.resource.UserResource"/>
    </bag>

   <bag name="articleList" cascade="all" inverse="true">
      <key column="id_user" not-null="true"/>
      <one-to-many class="com.elnominal.model.article.Article"/>
    </bag>

   <bag name="commentList" cascade="all" inverse="true">
      <key column="id_user" not-null="true"/>
      <one-to-many class="com.elnominal.model.comment.UserComment"/>
    </bag>

</class>

</hibernate-mapping>


This is my Category.hbm:
Code:
<hibernate-mapping package="com.elnominal.model.category">

<class name="Category" lazy="true">

   <id name="id" type="integer" column="id">
      <generator class="native"/>
   </id>

   <property name="title" type="string" column="title" length="50" not-null="true"/>
   <property name="description" type="string" column="description" length="1000" not-null="false"/>
   <property name="creationDate" column="creation_date" type="java.util.Date" update="false" not-null="true"/>

   <many-to-one name="parentCategory" cascade="none" outer-join="false" column="id_parent" not-null="false" unique-key="UNIQUE_NAME_AT_LEVEL"/>      

   <union-subclass name="UserCategory" table="elnominal_user_category" />
   <union-subclass name="ProfileCategory" table="elnominal_profile_category" />
   <union-subclass name="ArticleCategory" table="elnominal_article_category" />
   <union-subclass name="ResourceCategory" table="elnominal_resource_category" />

</class>

</hibernate-mapping>


this is the relevant part of my UserServlet:
Code:
// Get data providers      
      // ResourceCategory
      List<? extends Category> resourceCategoryList = (List<? extends Category>) categoryDao.findAll(ResourceCategory.class, false);
      request.setAttribute("resourceCategoryList", resourceCategoryList);
      // UserCategory
      List<? extends Category> userCategoryList = (List<? extends Category>) categoryDao.findAll(UserCategory.class, false);
      request.setAttribute("userCategoryList", userCategoryList);
      // ProfileCategory
      List<? extends Category> profileCategoryList = (List<? extends Category>) categoryDao.findAll(ProfileCategory.class, false);
      request.setAttribute("profileCategoryList", profileCategoryList);         


And my CategoryDao:
Code:
// ********************************************************** //

   public Collection<?> findAll(Class<?> clazz, boolean onlyRootCategories) throws InfrastructureException {
      Collection<?> categories;
      try {
         if (onlyRootCategories) {
            categories = currentSession.createCriteria(clazz).add(Expression.isNull("parentCategory")).list();
         } else {
            categories = currentSession.createCriteria(clazz).list();
         }
      } catch (HibernateException ex) {
         throw new InfrastructureException(ex);
      }
      return categories;
   }   


Finally, this is the exception:
Code:
Hibernate: select this_.id as id14_0_, this_.title as title14_0_, this_.subtitle as subtitle14_0_, this_.entry as entry14_0_, this_.text as text14_0_, this_.creation_date as creation6_14_0_, this_.id_activation_state as id7_14_0_, this_.id_user as id8_14_0_, this_.id_rating as id9_14_0_, this_.id_content_metadata as id10_14_0_, this_.id_client_metadata as id11_14_0_, this_.id_category as id12_14_0_ from elnominal_article this_ where this_.id_activation_state=? order by this_.creation_date desc limit ?
Hibernate: select this_.id as id6_0_, this_.title as title6_0_, this_.description as descript3_6_0_, this_.creation_date as creation4_6_0_, this_.id_parent as id5_6_0_ from elnominal_web_section this_
Hibernate: select this_.id as id1_0_, this_.title as title1_0_, this_.description as descript3_1_0_, this_.creation_date as creation4_1_0_, this_.id_parent as id5_1_0_ from elnominal_resource_category this_
Hibernate: select this_.id as id1_0_, this_.title as title1_0_, this_.description as descript3_1_0_, this_.creation_date as creation4_1_0_, this_.id_parent as id5_1_0_ from elnominal_user_category this_
com.elnominal.exception.InfrastructureException: org.hibernate.WrongClassException: Object with id: 1 was not of the specified subclass: com.elnominal.model.category.UserCategory (loaded object was of wrong class class com.elnominal.model.category.ResourceCategory)
   at com.elnominal.dao.CategoryDAO.findAll(CategoryDAO.java:63)
   at com.elnominal.servlet.controller.UserServlet.service(UserServlet.java:82)
   at javax.servlet.http.HttpServlet.service(HttpServlet.java:717)
   at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:290)
   at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
   at com.elnominal.servlet.SearchDataFilter.doFilter(SearchDataFilter.java:41)
   at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:235)
   at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
   at com.elnominal.servlet.HibernateSessionRequestFilter.doFilter(HibernateSessionRequestFilter.java:25)
   at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:235)
   at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
   at com.elnominal.servlet.SetCharacterEncodingFilter.doFilter(SetCharacterEncodingFilter.java:104)
   at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:235)
   at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
   at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:233)
   at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:191)
   at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:128)
   at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:102)
   at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:109)
   at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:286)
   at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:845)
   at org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.process(Http11Protocol.java:583)
   at org.apache.tomcat.util.net.JIoEndpoint$Worker.run(JIoEndpoint.java:447)
   at java.lang.Thread.run(Thread.java:619)
Caused by: org.hibernate.WrongClassException: Object with id: 1 was not of the specified subclass: com.elnominal.model.category.UserCategory (loaded object was of wrong class class com.elnominal.model.category.ResourceCategory)
   at org.hibernate.loader.Loader.instanceAlreadyLoaded(Loader.java:1243)
   at org.hibernate.loader.Loader.getRow(Loader.java:1195)
   at org.hibernate.loader.Loader.getRowFromResultSet(Loader.java:580)
   at org.hibernate.loader.Loader.doQuery(Loader.java:701)
   at org.hibernate.loader.Loader.doQueryAndInitializeNonLazyCollections(Loader.java:236)
   at org.hibernate.loader.Loader.doList(Loader.java:2213)
   at org.hibernate.loader.Loader.listIgnoreQueryCache(Loader.java:2104)
   at org.hibernate.loader.Loader.list(Loader.java:2099)
   at org.hibernate.loader.criteria.CriteriaLoader.list(CriteriaLoader.java:94)
   at org.hibernate.impl.SessionImpl.list(SessionImpl.java:1569)
   at org.hibernate.impl.CriteriaImpl.list(CriteriaImpl.java:283)
   at com.elnominal.dao.CategoryDAO.findAll(CategoryDAO.java:60)
   ... 23 more
24-mar-2009 9:43:51 org.apache.catalina.core.StandardWrapperValve invoke
GRAVE: Servlet.service() para servlet UserServlet lanz� excepci�n
org.hibernate.WrongClassException: Object with id: 1 was not of the specified subclass: com.elnominal.model.category.UserCategory (loaded object was of wrong class class com.elnominal.model.category.ResourceCategory)
   at org.hibernate.loader.Loader.instanceAlreadyLoaded(Loader.java:1243)
   at org.hibernate.loader.Loader.getRow(Loader.java:1195)
   at org.hibernate.loader.Loader.getRowFromResultSet(Loader.java:580)
   at org.hibernate.loader.Loader.doQuery(Loader.java:701)
   at org.hibernate.loader.Loader.doQueryAndInitializeNonLazyCollections(Loader.java:236)
   at org.hibernate.loader.Loader.doList(Loader.java:2213)
   at org.hibernate.loader.Loader.listIgnoreQueryCache(Loader.java:2104)
   at org.hibernate.loader.Loader.list(Loader.java:2099)
   at org.hibernate.loader.criteria.CriteriaLoader.list(CriteriaLoader.java:94)
   at org.hibernate.impl.SessionImpl.list(SessionImpl.java:1569)
   at org.hibernate.impl.CriteriaImpl.list(CriteriaImpl.java:283)
   at com.elnominal.dao.CategoryDAO.findAll(CategoryDAO.java:60)
   at com.elnominal.servlet.controller.UserServlet.service(UserServlet.java:82)
   at javax.servlet.http.HttpServlet.service(HttpServlet.java:717)
   at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:290)
   at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
   at com.elnominal.servlet.SearchDataFilter.doFilter(SearchDataFilter.java:41)
   at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:235)
   at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
   at com.elnominal.servlet.HibernateSessionRequestFilter.doFilter(HibernateSessionRequestFilter.java:25)
   at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:235)
   at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
   at com.elnominal.servlet.SetCharacterEncodingFilter.doFilter(SetCharacterEncodingFilter.java:104)
   at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:235)
   at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
   at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:233)
   at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:191)
   at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:128)
   at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:102)
   at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:109)
   at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:286)
   at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:845)
   at org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.process(Http11Protocol.java:583)
   at org.apache.tomcat.util.net.JIoEndpoint$Worker.run(JIoEndpoint.java:447)
   at java.lang.Thread.run(Thread.java:619)


Can someone help me? Really, i cannot see what i am doing worng.

Thanks in advance


Top
 Profile  
 
 Post subject:
PostPosted: Tue Mar 24, 2009 8:39 am 
Expert
Expert

Joined: Fri Jan 30, 2009 1:47 am
Posts: 292
Location: Bangalore, India
I think the issue is that your DB has the same primary key value '1' for both UserCategory and ResourceCategory. So when hibernate looks it sees that Category object of id '1' is already loaded and tries to give you bak the already loaded object, but it fails coz you are asking for UserCategory and the loaded object is some other sub class type.

_________________
Regards,
Litty Preeth


Top
 Profile  
 
 Post subject:
PostPosted: Tue Mar 24, 2009 9:11 am 
Beginner
Beginner

Joined: Mon May 26, 2008 3:34 am
Posts: 31
hi littypreethkr,

Indeed that was the problem, but i had to modify the primary key values for my four Category tables to make them distinct.

Is there any other workaround so i can have primary keys from 1 to n in my tables?

Thanks a lot for the help.


Top
 Profile  
 
 Post subject:
PostPosted: Tue Mar 24, 2009 9:30 am 
Expert
Expert

Joined: Fri Jan 30, 2009 1:47 am
Posts: 292
Location: Bangalore, India
Quote:
Is there any other workaround so i can have primary keys from 1 to n in my tables?

What do you mean by tht?

_________________
Regards,
Litty Preeth


Top
 Profile  
 
 Post subject:
PostPosted: Tue Mar 24, 2009 9:52 am 
Beginner
Beginner

Joined: Mon May 26, 2008 3:34 am
Posts: 31
Well,

i have 1 table per subclass:
- elnominal_resource_category
- elnominal_article_category
- elnominal_profile_category
- elnominal_user_category

To solve the previous problem i had to change the primary keys values to be distinct among all tables. But i would like to have each table primary keys values to start from 1.

elnominal_resource_category id from 1 to n.
elnominal_article_category id from 1 to n.
elnominal_profile_category id from 1 to n.
elnominal_user_category id from 1 to n.

Sorry for my English, i hope im clearer now.

Thanks again


Top
 Profile  
 
 Post subject:
PostPosted: Wed Mar 25, 2009 12:55 am 
Expert
Expert

Joined: Fri Jan 30, 2009 1:47 am
Posts: 292
Location: Bangalore, India
No. You cannot have id from 1 to n in all the subclass tables. Coz the ids of the 2 different Category object require to be unique. Also how come you got non-unique ids in the tables? coz you are using the same sequence for all the category types.

_________________
Regards,
Litty Preeth


Top
 Profile  
 
 Post subject:
PostPosted: Wed Mar 25, 2009 3:56 am 
Beginner
Beginner

Joined: Mon May 26, 2008 3:34 am
Posts: 31
Thank you very much, littypreethkr


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

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.