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