Key class conflict with OneToOne relation
lafr Sep 13, 2007 6:25 PMUsing JBoss-4.2.2.GA.
Using a uni-directional OneToOne Relation between two entities with a composite PK.
First class:
@Entity @IdClass(value=MbiMsgpa.PK.class) @Table(name="mbi_msgpa") public class MbiMsgpa implements java.io.Serializable { @Id @Column(name="msghd_serial") private java.lang.Integer msghdSerial; @Id @Column(name="part_no") private java.lang.Integer partNo; @Column(name="message_type") private java.lang.String messageType; @Column(name="source") private java.lang.String source; /** Field line. */ @Column(name="line") private java.lang.Integer line; @Column(name="time_created") private java.util.Date timeCreated; @Column(name="bp_task_id") private java.lang.Integer bpTaskId; @OneToOne(cascade=CascadeType.ALL,fetch=FetchType.LAZY) @JoinColumns({ @JoinColumn(name="msghd_serial",referencedColumnName="msghd_serial",insertable=false,updatable=false), @JoinColumn(name="part_no",referencedColumnName="part_no",insertable=false,updatable=false) }) private MbiMsgpt mbiMsgpt; ....
Second class is
@Entity @IdClass(value=MbiMsgpt.PK.class) @Table(name="mbi_msgpt") public class MbiMsgpt implements java.io.Serializable { @Id @Column(name="msghd_serial") private java.lang.Integer msghdSerial; @Id @Column(name="part_no") private java.lang.Integer partNo; ...
Using this, I get exceptions like this:
2007-09-13 17:51:14,832 INFO [biz.mbisoftware.fn.ejb.session.core.MessageSink] Calling MessageSink.appendMessage(INFO, 4756, [1.2007-09-13 17:51:14.mbi_distol.ec.282.null[Verarbeitung beendet]]) 2007-09-13 17:51:14,836 INFO [STDOUT] Hibernate: select mbimsghd0_.msghd_serial as msghd1_99_0_, mbimsghd0_.session_id as session2_99_0_, mbimsghd0_.process_id as process3_99_0_, mbimsghd0_.hostname as hostname99_0_, mbimsghd0_.time_created as time5_99_0_, mbimsghd0_.login_bez_created as login6_99_0_, mbimsghd0_.state as state99_0_, mbimsghd0_.bp_id as bp8_99_0_, mbimsghd0_.iso_sprach_id as iso9_99_0_, mbimsghd0_.iso_sprach_id_def as iso10_99_0_, mbimsghd0_.adress_nr as adress11_99_0_ from mbi_msghd mbimsghd0_ where mbimsghd0_.msghd_serial=? 2007-09-13 17:51:14,859 INFO [STDOUT] Hibernate: select mbimsgpa0_.msghd_serial as msghd1_1_, mbimsgpa0_.part_no as part2_1_, mbimsgpa0_.msghd_serial as msghd1_101_0_, mbimsgpa0_.part_no as part2_101_0_, mbimsgpa0_.message_type as message3_101_0_, mbimsgpa0_.source as source101_0_, mbimsgpa0_.line as line101_0_, mbimsgpa0_.time_created as time6_101_0_, mbimsgpa0_.bp_task_id as bp7_101_0_ from mbi_msgpa mbimsgpa0_ where mbimsgpa0_.msghd_serial=? order by mbimsgpa0_.msghd_serial asc, mbimsgpa0_.part_no asc 2007-09-13 17:51:14,887 WARN [org.hibernate.engine.loading.LoadContexts] fail-safe cleanup (collections) : org.hibernate.engine.loading.CollectionLoadContext@1886bfe<rs=com.informix.jdbc.IfxResultSet@233e98> 2007-09-13 17:51:14,887 WARN [org.hibernate.engine.loading.CollectionLoadContext] On CollectionLoadContext#cleanup, localLoadingCollectionKeys contained [1] entries 2007-09-13 17:51:14,896 ERROR [org.jboss.ws.core.jaxws.SOAPFaultHelperJAXWS] SOAP request exception javax.ejb.EJBException: org.hibernate.TypeMismatchException: Provided id of the wrong type. Expected: class biz.mbisoftware.fn.ejb.entity.MbiMsgpt$PK, got class biz.mbisoftware.fn.ejb.entity.MbiMsgpa$PK at org.jboss.ejb3.tx.Ejb3TxPolicy.handleExceptionInOurTx(Ejb3TxPolicy.java:63) at org.jboss.aspects.tx.TxPolicy.invokeInOurTx(TxPolicy.java:83) at org.jboss.aspects.tx.TxInterceptor$RequiresNew.invoke(TxInterceptor.java:262) at org.jboss.aop.joinpoint.MethodInvocation.invokeNext(MethodInvocation.java:101) at org.jboss.aspects.tx.TxPropagationInterceptor.invoke(TxPropagationInterceptor.java:95) at org.jboss.aop.joinpoint.MethodInvocation.invokeNext(MethodInvocation.java:101) at org.jboss.ejb3.stateless.StatelessInstanceInterceptor.invoke(StatelessInstanceInterceptor.java:62) at org.jboss.aop.joinpoint.MethodInvocation.invokeNext(MethodInvocation.java:101) at org.jboss.aspects.security.AuthenticationInterceptor.invoke(AuthenticationInterceptor.java:77) at org.jboss.ejb3.security.Ejb3AuthenticationInterceptor.invoke(Ejb3AuthenticationInterceptor.java:106) at org.jboss.aop.joinpoint.MethodInvocation.invokeNext(MethodInvocation.java:101) at org.jboss.ejb3.ENCPropagationInterceptor.invoke(ENCPropagationInterceptor.java:46) at org.jboss.aop.joinpoint.MethodInvocation.invokeNext(MethodInvocation.java:101) at org.jboss.ejb3.asynchronous.AsynchronousInterceptor.invoke(AsynchronousInterceptor.java:106) at org.jboss.aop.joinpoint.MethodInvocation.invokeNext(MethodInvocation.java:101) at org.jboss.ejb3.stateless.StatelessContainer.localInvoke(StatelessContainer.java:214) at org.jboss.ejb3.stateless.StatelessContainer.localInvoke(StatelessContainer.java:184) at org.jboss.ejb3.stateless.StatelessLocalProxy.invoke(StatelessLocalProxy.java:84) at $Proxy193.appendMessage(Unknown Source) at biz.mbisoftware.fn.ws.core.MessageServiceWS.appendMessage(MessageServiceWS.java:84) at biz.mbisoftware.fn.ws.core.MessageServiceWS.appendInfo(MessageServiceWS.java:178) at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39) at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25) at java.lang.reflect.Method.invoke(Method.java:585) at org.jboss.ws.core.server.ServiceEndpointInvokerJSE.invokeServiceEndpointInstance(ServiceEndpointInvokerJSE.java:104) at org.jboss.ws.core.server.AbstractServiceEndpointInvoker.invoke(AbstractServiceEndpointInvoker.java:207) at org.jboss.ws.core.server.ServiceEndpointInvokerJSE.invokeServiceEndpointInstance(ServiceEndpointInvokerJSE.java:104) at org.jboss.ws.core.server.AbstractServiceEndpointInvoker.invoke(AbstractServiceEndpointInvoker.java:207) at org.jboss.ws.core.server.ServiceEndpoint.processRequest(ServiceEndpoint.java:212) at org.jboss.ws.core.server.ServiceEndpointManager.processRequest(ServiceEndpointManager.java:448) at org.jboss.ws.core.server.AbstractServiceEndpointServlet.doPost(AbstractServiceEndpointServlet.java:114) at javax.servlet.http.HttpServlet.service(HttpServlet.java:710) at org.jboss.ws.core.server.AbstractServiceEndpointServlet.service(AbstractServiceEndpointServlet.java:75) at javax.servlet.http.HttpServlet.service(HttpServlet.java:803) at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:290) at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206) at org.jboss.web.tomcat.filters.ReplyHeaderFilter.doFilter(ReplyHeaderFilter.java:96) 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:230) at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:175) at org.jboss.web.tomcat.security.SecurityAssociationValve.invoke(SecurityAssociationValve.java:179) at org.jboss.web.tomcat.security.JaccContextValve.invoke(JaccContextValve.java:84) at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:127) at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:102) at org.jboss.web.tomcat.service.jca.CachedConnectionValve.invoke(CachedConnectionValve.java:157) at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:109) at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:262) at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:844) at org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.process(Http11Protocol.java:583) at org.apache.tomcat.util.net.JIoEndpoint$Worker.run(JIoEndpoint.java:446) at java.lang.Thread.run(Thread.java:595) Caused by: org.hibernate.TypeMismatchException: Provided id of the wrong type. Expected: class biz.mbisoftware.fn.ejb.entity.MbiMsgpt$PK, got class biz.mbisoftware.fn.ejb.entity.MbiMsgpa$PK at org.hibernate.event.def.DefaultLoadEventListener.onLoad(DefaultLoadEventListener.java:86) at org.hibernate.impl.SessionImpl.fireLoad(SessionImpl.java:878) at org.hibernate.impl.SessionImpl.internalLoad(SessionImpl.java:846) at org.hibernate.type.EntityType.resolveIdentifier(EntityType.java:557) at org.hibernate.type.EntityType.resolve(EntityType.java:379) at org.hibernate.engine.TwoPhaseLoad.initializeEntity(TwoPhaseLoad.java:116) at org.hibernate.loader.Loader.initializeEntitiesAndCollections(Loader.java:854) at org.hibernate.loader.Loader.doQuery(Loader.java:729) at org.hibernate.loader.Loader.doQueryAndInitializeNonLazyCollections(Loader.java:236) at org.hibernate.loader.Loader.loadCollection(Loader.java:1994) at org.hibernate.loader.collection.CollectionLoader.initialize(CollectionLoader.java:36) at org.hibernate.persister.collection.AbstractCollectionPersister.initialize(AbstractCollectionPersister.java:565) at org.hibernate.event.def.DefaultInitializeCollectionEventListener.onInitializeCollection(DefaultInitializeCollectionEventListener.java:60) at org.hibernate.impl.SessionImpl.initializeCollection(SessionImpl.java:1716) at org.hibernate.collection.AbstractPersistentCollection.initialize(AbstractPersistentCollection.java:344) at org.hibernate.collection.AbstractPersistentCollection.read(AbstractPersistentCollection.java:86) at org.hibernate.collection.AbstractPersistentCollection.readSize(AbstractPersistentCollection.java:109) at org.hibernate.collection.PersistentBag.size(PersistentBag.java:225) at org.hibernate.collection.AbstractPersistentCollection.readSize(AbstractPersistentCollection.java:109) at org.hibernate.collection.PersistentBag.size(PersistentBag.java:225) at biz.mbisoftware.fn.ejb.session.core.MessageSink.storeMessagePart(MessageSink.java:167) at biz.mbisoftware.fn.ejb.session.core.MessageSink.appendMessage(MessageSink.java:213) at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39) at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25) at java.lang.reflect.Method.invoke(Method.java:585) at org.jboss.aop.joinpoint.MethodInvocation.invokeNext(MethodInvocation.java:112) at org.jboss.ejb3.interceptor.InvocationContextImpl.proceed(InvocationContextImpl.java:166) at biz.mbisoftware.common.ParameterInterceptor.parameters(ParameterInterceptor.java:43) at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39) at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25) at java.lang.reflect.Method.invoke(Method.java:585) at org.jboss.ejb3.interceptor.InvocationContextImpl.proceed(InvocationContextImpl.java:118) at org.jboss.ejb3.interceptor.EJB3InterceptorsInterceptor.invoke(EJB3InterceptorsInterceptor.java:63) at org.jboss.aop.joinpoint.MethodInvocation.invokeNext(MethodInvocation.java:101) at org.jboss.ejb3.entity.TransactionScopedEntityManagerInterceptor.invoke(TransactionScopedEntityManagerInterceptor.java:54) at org.jboss.aop.joinpoint.MethodInvocation.invokeNext(MethodInvocation.java:101) at org.jboss.ejb3.AllowedOperationsInterceptor.invoke(AllowedOperationsInterceptor.java:47) at org.jboss.aop.joinpoint.MethodInvocation.invokeNext(MethodInvocation.java:101) at org.jboss.aspects.tx.TxPolicy.invokeInOurTx(TxPolicy.java:79) ... 49 more
Using MbiMsgpa.PK as the ID-class instead of MbiMsgpt.PK for Entity MbiMsgpt solves the problem.
Is this somewhere documented as the expected behaviour for this or may I call this a Bug?