Hi,
I am doing a mapping class hierarchy to a table.
I have 2 classes;
OrganizationNode -- base class
SummaryNode -- extends OrganizationNode
CostCenterNode -- extends OgranizationNode
I am trying to build the entire hierarchy in memory, but I am getting this org.hibernate.WrongClassException: Object with id: 96696 was not of the specified subclass.
I am getting this error at different nodes at different times. I do not understand why the hibernate is not able to create the correct instance of the sub class
Hibernet version: 3.2.2
---------------------------------------------------------
Mapping File
--------------------------------------------------
<?xml version="1.0"?>
<!DOCTYPE hibernate-mapping PUBLIC
"-//Hibernate/Hibernate Mapping DTD 3.0//EN"
"http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">
<hibernate-mapping package="com.jpmc.planning.biz.dom.reference">
<class name="OrganizationNode"
polymorphism="explicit"
table="PLN_DIM_ORG"
schema="PLANDBA"
lazy="false">
<id name="id" type="string" column="ORG_ID">
<generator class="native"/>
</id>
<discriminator
formula="(select decode(translate(substr(trim(org_id),1,1),'_0123456789','_'),null,'COST_CENTER','SUMMARY')
from PLN_DIM_ORG node where node.org_id = org_id )"
type="string" force="true"/>
<property name="description" type="string" column="ORG_SHRT_NM"/>
<!-- Parent can be null for root nodes -->
<!-- lazy="false"-->
<!-- outer-join="false" -->
<many-to-one name="parent" cascade="none"
outer-join="false"
lazy="false"
not-found="ignore" >
<column name="ORG_PARNT_NODE_ID" not-null="false"/>
</many-to-one>
<subclass name="CostCenterNode" discriminator-value="COST_CENTER" lazy="false"/>
<subclass name="SummaryNode" discriminator-value="SUMMARY" lazy="false">
<set name="children"
cascade="none"
inverse="false"
lazy="true"
batch-size="50"
access="property">
<!-- define cache for collections separatly -->
<key column="ORG_PARNT_NODE_ID"/>
<one-to-many class="OrganizationNode"/>
</set>
</subclass>
</class>
</hibernate-mapping>
----------------------------------------------------------------------
Stack trace:
---------------------------------------------------------
org.hibernate.WrongClassException: Object with id: 96696 was not of the specified subclass: com.jpmc.planning.biz.dom.reference.SummaryNode (loaded object was of wrong class class com.jpmc.planning.biz.dom.reference.CostCenterNode)
at org.hibernate.loader.Loader.instanceAlreadyLoaded(Loader.java(Compiled Code))
at org.hibernate.loader.Loader.getRow(Loader.java(Compiled Code))
at org.hibernate.loader.Loader.getRowFromResultSet(Loader.java(Compiled Code))
at org.hibernate.loader.Loader.doQuery(Loader.java(Compiled Code))
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.custom.CustomLoader.list(CustomLoader.java:289)
at org.hibernate.impl.SessionImpl.listCustomQuery(SessionImpl.java:1695)
at org.hibernate.impl.AbstractSessionImpl.list(AbstractSessionImpl.java:142)
at org.hibernate.impl.SQLQueryImpl.list(SQLQueryImpl.java:152)
at com.jpmc.planning.hib.dao.OrganizationNodeDAO.findByHier(OrganizationNodeDAO.java:107)
at com.jpmc.planning.hib.dao.OrganizationNodeDAO.buildHierachy(OrganizationNodeDAO.java(Compiled Code))
at com.jpmc.planning.hib.unitTest.OrgnanizationDAOTest.main(OrgnanizationDAOTest.java:40)
|