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
|