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.  [ 3 posts ] 
Author Message
 Post subject: Receiving ClassCastException when trying to add object
PostPosted: Fri May 26, 2006 9:59 am 
Newbie

Joined: Tue Mar 14, 2006 3:20 pm
Posts: 14
Hi everyone,

I have run out of ideas. I am creating JSR-168 portlets with Spring and Hibernate. In my portlets, I have:

Class:
VendorContactBean (extends ContactBean)

and
VendorCompanyBean (extends CompanyBean)

In the ContactBean class, I have getter/setter methods:
public Set getCompanies()
public void setCompanies()

I have the same thing in my ContactBean class.

The problem is that when I try to add to the existing Set of companies (or contacts) I get a ClassCastException. If I only use the base class ContactBean/CompanyBean everywhere, then it works fine. It's only when I extend the base class do I get this error.

Can someone help me figure out what I'm doing wrong?

Thanks,
Eric

Hibernate version:
3.1

Mapping documents:
Mapping for my Contact:
<class name="com.spx.itvendors.beans.ContactBean">
<id unsaved-value="0" column="id" type="int" name="id">
<generator class="sequence">
<param name="sequence">itvendor_seq_contactid</param>
</generator>
</id>

<property name="firstName">
<column name="FIRST_NAME" not-null="true"/>
</property>
<property name="lastName">
<column name="LAST_NAME" not-null="true"/>
</property>

<property name="email"/>
<property name="fax">
<column name="facsimiletelephonenumber"/>
</property>
<property name="telephoneNumber"/>
<property name="cellularTelephone"/>
<property name="pager"/>

<set name="companies" table="itvendor_contact_company_map" sort="natural">
<key column="contact_id"/>
<many-to-many column="company_id" class="com.spx.itvendors.beans.VendorCompanyBean"/>
</set>

<union-subclass name="com.spx.itvendors.beans.VendorContactBean" table="itvendor_contact">
</union-subclass>

</class>

Mapping for my Company:

<class name="com.spx.itvendors.beans.CompanyBean">
<id unsaved-value="0" column="id" type="int" name="id">
<generator class="sequence">
<param name="sequence">itvendor_seq_companyid</param>
</generator>
</id>

<property name="name">
<column name="name" not-null="true"/>
</property>

<property name="address1"/>
<property name="address2"/>
<property name="city"/>
<property name="stateOrProvince"/>
<property name="postalCode"/>
<property name="country"/>

<set name="contacts" table="itvendor_contact_company_map" sort="natural">
<key column="company_id"/>
<many-to-many column="contact_id" class="com.spx.itvendors.beans.VendorContactBean"/>
</set>

<union-subclass name="com.spx.itvendors.beans.VendorCompanyBean" table="itvendor_company">
<property name="commodity"/>
<property name="url"/>
</union-subclass>
</class>



Code between sessionFactory.openSession() and session.close():

tx = session.beginTransaction();
log.debug("adding contact #" + contactId + " to company #" + companyId);

VendorContactBean contact = (VendorContactBean) session.load(VendorContactBean.class, new Integer(contactId));
VendorCompanyBean company = (VendorCompanyBean) session.load(VendorCompanyBean.class, new Integer(companyId));

Set contacts = company.getContacts();
contacts.add(contact);

log.debug("Contact was added to company... committing change");
company.setContacts(contacts);
log.debug("Done setting contacts in company object");
tx.commit();

Full stack trace of any exception that occurs:
DEBUG [http-8080-Processor21] 31096ms 2006-May-26 09:51:18 org.springframework.web.portlet.DispatcherPortlet - Caught exception during action phase - forwarding to render phase
java.lang.ClassCastException: com.spx.itvendors.beans.VendorContactBean$$EnhancerByCGLIB$$585c7d31
at java.util.TreeMap.compare(TreeMap.java:1085)
at java.util.TreeMap.put(TreeMap.java:463)
at java.util.TreeSet.add(TreeSet.java:209)
at org.hibernate.collection.PersistentSet.add(PersistentSet.java:159)
at com.spx.itvendors.data.SpringCompanyDAO.addContact(SpringCompanyDAO.java:305)
at com.spx.itvendors.CompanyAddContactProcess.onSubmitAction(CompanyAddContactProcess.java:70)
at org.springframework.web.portlet.mvc.SimpleFormController.processFormSubmission(SimpleFormController.java:322)
at org.springframework.web.portlet.mvc.AbstractFormController.handleInvalidSubmit(AbstractFormController.java:951)
at org.springframework.web.portlet.mvc.AbstractFormController.handleActionRequestInternal(AbstractFormController.java:422)
at org.springframework.web.portlet.mvc.AbstractController.handleActionRequest(AbstractController.java:224)
at org.springframework.web.portlet.mvc.SimpleControllerHandlerAdapter.handleAction(SimpleControllerHandlerAdapter.java:52)
at org.springframework.web.portlet.DispatcherPortlet.doActionService(DispatcherPortlet.java:604)
at org.springframework.web.portlet.FrameworkPortlet.processRequest(FrameworkPortlet.java:417)
at org.springframework.web.portlet.FrameworkPortlet.processAction(FrameworkPortlet.java:400)
at com.vignette.portal.portlet.jsrcontainer.internal.standardcontainer.invocation.ProcessActionCommand.execute(ProcessActionCommand.java:49)
at com.vignette.portal.portlet.jsrcontainer.PortletCommandServlet.service(PortletCommandServlet.java:166)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:802)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:237)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:157)
at org.apache.catalina.core.ApplicationDispatcher.invoke(ApplicationDispatcher.java:704)
at org.apache.catalina.core.ApplicationDispatcher.doInclude(ApplicationDispatcher.java:590)
at org.apache.catalina.core.ApplicationDispatcher.include(ApplicationDispatcher.java:510)
at com.vignette.portal.portlet.jsrcontainer.internal.standardcontainer.invocation.PortletRequestBroker.sendRequestCommand(PortletRequestBroker.java:108)
at com.vignette.portal.portlet.jsrcontainer.internal.standardcontainer.invocation.PortletRequestBroker.executeProcessActionRequest(PortletRequestBroker.java:251)
at com.vignette.portal.portlet.jsrcontainer.internal.standardcontainer.PortletContainerImpl.executeProcessActionRequest(PortletContainerImpl.java:92)
at com.vignette.portal.portlet.management.internal.implementation.provider.jsr.JsrPortletSpiImpl.doAction(JsrPortletSpiImpl.java:210)
at com.vignette.portal.portlet.management.internal.implementation.standard.StandardPortlet.doAction(StandardPortlet.java:555)
at com.vignette.portal.portlet.invocation.internal.StandardPortletInvocationAgent.processPortletAction(StandardPortletInvocationAgent.java:217)
at com.vignette.portal.portlet.invocation.internal.InSerialPortletRequestBroker.processAction(InSerialPortletRequestBroker.java:52)
at com.epicentric.page.website.internal.PagePortletRequestBrokerImpl.processAction(PagePortletRequestBrokerImpl.java:91)
at com.vignette.portal.website.enduser.components.page.common.ExecutePortletActionProcessAction.portletProcessAction(ExecutePortletActionProcessAction.java:114)
at com.vignette.portal.website.enduser.components.page.common.ExecutePortletActionProcessAction.execute(ExecutePortletActionProcessAction.java:63)
at com.vignette.portal.website.enduser.internal.requestprocessing.system.DefaultRequestProcessor.process(DefaultRequestProcessor.java:172)
at com.vignette.portal.website.enduser.internal.ControllerServlet.service(ControllerServlet.java:152)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:802)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:237)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:157)
at com.vignette.portal.website.enduser.filters.SiteResolutionFilter.doFilter(SiteResolutionFilter.java:76)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:186)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:157)
at com.vignette.portal.website.enduser.filters.AuthenticationFilter.doFilter(AuthenticationFilter.java:45)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:186)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:157)
at com.vignette.portal.website.enduser.filters.InitPortalContextFilter.doFilter(InitPortalContextFilter.java:61)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:186)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:157)
at com.vignette.portal.website.internal.StartupProtectionFilter.doFilterSingleInvocation(StartupProtectionFilter.java:103)
at com.vignette.portal.website.internal.SingleInvocationFilter.doFilter(SingleInvocationFilter.java:55)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:186)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:157)
at com.vignette.portal.website.internal.EnvironmentalWrapperFilter.doFilterSingleInvocation(EnvironmentalWrapperFilter.java:51)
at com.vignette.portal.website.internal.SingleInvocationFilter.doFilter(SingleInvocationFilter.java:55)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:186)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:157)
at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:214)
at org.apache.catalina.core.StandardValveContext.invokeNext(StandardValveContext.java:104)
at org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.java:520)
at org.apache.catalina.core.StandardContextValve.invokeInternal(StandardContextValve.java:198)
at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:152)
at org.apache.catalina.core.StandardValveContext.invokeNext(StandardValveContext.java:104)
at org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.java:520)
at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:137)
at org.apache.catalina.core.StandardValveContext.invokeNext(StandardValveContext.java:104)
at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:118)
at org.apache.catalina.core.StandardValveContext.invokeNext(StandardValveContext.java:102)
at org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.java:520)
at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:109)
at org.apache.catalina.core.StandardValveContext.invokeNext(StandardValveContext.java:104)
at org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.java:520)
at org.apache.catalina.core.ContainerBase.invoke(ContainerBase.java:929)
at org.apache.coyote.tomcat5.CoyoteAdapter.service(CoyoteAdapter.java:160)
at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:799)
at org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.processConnection(Http11Protocol.java:705)
at org.apache.tomcat.util.net.TcpWorkerThread.runIt(PoolTcpEndpoint.java:577)
at org.apache.tomcat.util.threads.ThreadPool$ControlRunnable.run(ThreadPool.java:683)
at java.lang.Thread.run(Thread.java:534)

Name and version of the database you are using:
Oracle 9i

The generated SQL (show_sql=true):
DEBUG [http-8080-Processor21] 31080ms 2006-May-26 09:51:18 org.hibernate.SQL - select contacts0_.company_id as company2_1_, contacts0_.contact_id as contact1_1_, vendorcont1_.id as id0_, vendorcont1_.FIRST_NAME as FIRST2_0_0_, vendorcont1_.LAST_NAME as LAST3_0_0_, vendorcont1_.email as email0_0_, vendorcont1_.facsimiletelephonenumber as facsimil5_0_0_, vendorcont1_.telephoneNumber as telephon6_0_0_, vendorcont1_.cellularTelephone as cellular7_0_0_, vendorcont1_.pager as pager0_0_ from itvendor_contact_company_map contacts0_ inner join itvendor_contact vendorcont1_ on contacts0_.contact_id=vendorcont1_.id where contacts0_.company_id=?


Debug level Hibernate log excerpt:
DEBUG [http-8080-Processor21] 31080ms 2006-May-26 09:51:18 org.hibernate.event.def.DefaultInitializeCollectionEventListener - initializing collection [com.spx.itvendors.beans.CompanyBean.contacts#163]
DEBUG [http-8080-Processor21] 31080ms 2006-May-26 09:51:18 org.hibernate.event.def.DefaultInitializeCollectionEventListener - checking second-level cache
DEBUG [http-8080-Processor21] 31080ms 2006-May-26 09:51:18 org.hibernate.event.def.DefaultInitializeCollectionEventListener - collection not cached
DEBUG [http-8080-Processor21] 31080ms 2006-May-26 09:51:18 org.hibernate.loader.Loader - loading collection: [com.spx.itvendors.beans.CompanyBean.contacts#163]
DEBUG [http-8080-Processor21] 31080ms 2006-May-26 09:51:18 org.hibernate.jdbc.AbstractBatcher - about to open PreparedStatement (open PreparedStatements: 0, globally: 0)
DEBUG [http-8080-Processor21] 31080ms 2006-May-26 09:51:18 org.hibernate.SQL - select contacts0_.company_id as company2_1_, contacts0_.contact_id as contact1_1_, vendorcont1_.id as id0_, vendorcont1_.FIRST_NAME as FIRST2_0_0_, vendorcont1_.LAST_NAME as LAST3_0_0_, vendorcont1_.email as email0_0_, vendorcont1_.facsimiletelephonenumber as facsimil5_0_0_, vendorcont1_.telephoneNumber as telephon6_0_0_, vendorcont1_.cellularTelephone as cellular7_0_0_, vendorcont1_.pager as pager0_0_ from itvendor_contact_company_map contacts0_ inner join itvendor_contact vendorcont1_ on contacts0_.contact_id=vendorcont1_.id where contacts0_.company_id=?
DEBUG [http-8080-Processor21] 31080ms 2006-May-26 09:51:18 org.hibernate.jdbc.AbstractBatcher - preparing statement
DEBUG [http-8080-Processor21] 31080ms 2006-May-26 09:51:18 org.hibernate.type.IntegerType - binding '163' to parameter: 1
DEBUG [http-8080-Processor21] 31080ms 2006-May-26 09:51:18 org.hibernate.jdbc.AbstractBatcher - about to open ResultSet (open ResultSets: 0, globally: 0)
DEBUG [http-8080-Processor21] 31080ms 2006-May-26 09:51:18 org.hibernate.loader.Loader - result set contains (possibly empty) collection: [com.spx.itvendors.beans.CompanyBean.contacts#163]
DEBUG [http-8080-Processor21] 31080ms 2006-May-26 09:51:18 org.hibernate.engine.CollectionLoadContext - uninitialized collection: initializing
DEBUG [http-8080-Processor21] 31080ms 2006-May-26 09:51:18 org.hibernate.loader.Loader - processing result set
DEBUG [http-8080-Processor21] 31080ms 2006-May-26 09:51:18 org.hibernate.loader.Loader - result set row: 0
DEBUG [http-8080-Processor21] 31080ms 2006-May-26 09:51:18 org.hibernate.type.IntegerType - returning '207' as column: id0_
DEBUG [http-8080-Processor21] 31080ms 2006-May-26 09:51:18 org.hibernate.loader.Loader - result row: EntityKey[com.spx.itvendors.beans.VendorContactBean#207]
DEBUG [http-8080-Processor21] 31080ms 2006-May-26 09:51:18 org.hibernate.loader.Loader - Initializing object from ResultSet: [com.spx.itvendors.beans.VendorContactBean#207]
DEBUG [http-8080-Processor21] 31080ms 2006-May-26 09:51:18 org.hibernate.persister.entity.BasicEntityPersister - Hydrating entity: [com.spx.itvendors.beans.VendorContactBean#207]
DEBUG [http-8080-Processor21] 31080ms 2006-May-26 09:51:18 org.hibernate.type.StringType - returning 'Eric' as column: FIRST2_0_0_
DEBUG [http-8080-Processor21] 31080ms 2006-May-26 09:51:18 org.hibernate.type.StringType - returning 'Borisow' as column: LAST3_0_0_
DEBUG [http-8080-Processor21] 31080ms 2006-May-26 09:51:18 org.hibernate.type.StringType - returning null as column: email0_0_
DEBUG [http-8080-Processor21] 31080ms 2006-May-26 09:51:18 org.hibernate.type.StringType - returning null as column: facsimil5_0_0_
DEBUG [http-8080-Processor21] 31080ms 2006-May-26 09:51:18 org.hibernate.type.StringType - returning null as column: telephon6_0_0_
DEBUG [http-8080-Processor21] 31080ms 2006-May-26 09:51:18 org.hibernate.type.StringType - returning null as column: cellular7_0_0_
DEBUG [http-8080-Processor21] 31080ms 2006-May-26 09:51:18 org.hibernate.type.StringType - returning null as column: pager0_0_
DEBUG [http-8080-Processor21] 31080ms 2006-May-26 09:51:18 org.hibernate.type.IntegerType - returning '163' as column: company2_1_
DEBUG [http-8080-Processor21] 31080ms 2006-May-26 09:51:18 org.hibernate.loader.Loader - found row of collection: [com.spx.itvendors.beans.CompanyBean.contacts#163]
DEBUG [http-8080-Processor21] 31080ms 2006-May-26 09:51:18 org.hibernate.engine.CollectionLoadContext - reading row
DEBUG [http-8080-Processor21] 31080ms 2006-May-26 09:51:18 org.hibernate.type.IntegerType - returning '207' as column: contact1_1_
DEBUG [http-8080-Processor21] 31080ms 2006-May-26 09:51:18 org.hibernate.event.def.DefaultLoadEventListener - loading entity: [com.spx.itvendors.beans.VendorContactBean#207]
DEBUG [http-8080-Processor21] 31080ms 2006-May-26 09:51:18 org.hibernate.event.def.DefaultLoadEventListener - attempting to resolve: [com.spx.itvendors.beans.VendorContactBean#207]
DEBUG [http-8080-Processor21] 31080ms 2006-May-26 09:51:18 org.hibernate.event.def.DefaultLoadEventListener - resolved object in session cache: [com.spx.itvendors.beans.VendorContactBean#207]
DEBUG [http-8080-Processor21] 31080ms 2006-May-26 09:51:18 org.hibernate.loader.Loader - done processing result set (1 rows)
DEBUG [http-8080-Processor21] 31080ms 2006-May-26 09:51:18 org.hibernate.jdbc.AbstractBatcher - about to close ResultSet (open ResultSets: 1, globally: 1)
DEBUG [http-8080-Processor21] 31080ms 2006-May-26 09:51:18 org.hibernate.jdbc.AbstractBatcher - about to close PreparedStatement (open PreparedStatements: 1, globally: 1)
DEBUG [http-8080-Processor21] 31080ms 2006-May-26 09:51:18 org.hibernate.jdbc.AbstractBatcher - closing statement
DEBUG [http-8080-Processor21] 31080ms 2006-May-26 09:51:18 org.hibernate.loader.Loader - total objects hydrated: 1
DEBUG [http-8080-Processor21] 31080ms 2006-May-26 09:51:18 org.hibernate.engine.TwoPhaseLoad - resolving associations for [com.spx.itvendors.beans.VendorContactBean#207]
DEBUG [http-8080-Processor21] 31080ms 2006-May-26 09:51:18 org.hibernate.engine.CollectionLoadContext - creating collection wrapper:[com.spx.itvendors.beans.ContactBean.companies#207]
DEBUG [http-8080-Processor21] 31080ms 2006-May-26 09:51:18 org.hibernate.engine.TwoPhaseLoad - done materializing entity [com.spx.itvendors.beans.VendorContactBean#207]
DEBUG [http-8080-Processor21] 31080ms 2006-May-26 09:51:18 org.hibernate.engine.CollectionLoadContext - 1 collections were found in result set for role: com.spx.itvendors.beans.CompanyBean.contacts
DEBUG [http-8080-Processor21] 31080ms 2006-May-26 09:51:18 org.hibernate.engine.CollectionLoadContext - collection fully initialized: [com.spx.itvendors.beans.CompanyBean.contacts#163]
DEBUG [http-8080-Processor21] 31080ms 2006-May-26 09:51:18 org.hibernate.engine.CollectionLoadContext - 1 collections initialized for role: com.spx.itvendors.beans.CompanyBean.contacts
DEBUG [http-8080-Processor21] 31080ms 2006-May-26 09:51:18 org.hibernate.engine.PersistenceContext - initializing non-lazy collections
DEBUG [http-8080-Processor21] 31080ms 2006-May-26 09:51:18 org.hibernate.loader.Loader - done loading collection
DEBUG [http-8080-Processor21] 31080ms 2006-May-26 09:51:18 org.hibernate.event.def.DefaultInitializeCollectionEventListener - collection initialized
DEBUG [http-8080-Processor21] 31080ms 2006-May-26 09:51:18 org.springframework.orm.hibernate3.SessionFactoryUtils - Closing Hibernate Session
DEBUG [http-8080-Processor21] 31080ms 2006-May-26 09:51:18 org.hibernate.impl.SessionImpl - closing session
DEBUG [http-8080-Processor21] 31080ms 2006-May-26 09:51:18 org.hibernate.jdbc.ConnectionManager - closing JDBC connection [ (open PreparedStatements: 0, globally: 0) (open ResultSets: 0, globally: 0)]
DEBUG [http-8080-Processor21] 31096ms 2006-May-26 09:51:18 org.springframework.web.portlet.DispatcherPortlet - Caught exception during action phase - forwarding to render phase
java.lang.ClassCastException: com.spx.itvendors.beans.VendorContactBean$$EnhancerByCGLIB$$585c7d31


Top
 Profile  
 
 Post subject:
PostPosted: Sat May 27, 2006 3:12 am 
Beginner
Beginner

Joined: Sat Dec 17, 2005 1:24 pm
Posts: 42
Location: Berlin, Germany
Hi!

Classes that are keys of a SortedMap or which are elements in a sorted set have to implement the Comparable interface. See the according Javadoc of TreeMap/TreeSet.

All the best,

René


Top
 Profile  
 
 Post subject: Sorry about this post... problem in my compareTo method
PostPosted: Sat May 27, 2006 10:19 pm 
Newbie

Joined: Tue Mar 14, 2006 3:20 pm
Posts: 14
Hi everyone,

This was a tough one to crack, but I finally did it. There was a problem in my compareTo method where I was comparing to incorrect objects.

But, in case anyone else is looking at this same problem, try to check out your compareTo method.

Thanks,
Eric


Top
 Profile  
 
Display posts from previous:  Sort by  
Forum locked This topic is locked, you cannot edit posts or make further replies.  [ 3 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.