[jboss-jira] [JBoss JIRA] Resolved: (EJBTHREE-378) Join Inheritance causing problem with subclass collection mapping

Emmanuel Bernard (JIRA) jira-events at lists.jboss.org
Tue Feb 13 20:58:06 EST 2007


     [ http://jira.jboss.com/jira/browse/EJBTHREE-378?page=all ]

Emmanuel Bernard resolved EJBTHREE-378.
---------------------------------------

    Resolution: Rejected

no user feedback

> Join Inheritance causing problem with subclass collection mapping
> -----------------------------------------------------------------
>
>                 Key: EJBTHREE-378
>                 URL: http://jira.jboss.com/jira/browse/EJBTHREE-378
>             Project: EJB 3.0
>          Issue Type: Bug
>    Affects Versions: EJB 3.0 RC3
>         Environment: Ubuntu Linux (5.0.4), JBoss 4.0.3RC2
>            Reporter: Michael Small
>         Assigned To: Emmanuel Bernard
>         Attachments: Client.java, ClientContact.java, Provider.java, ProviderContact.java, Relationship.java, RelationshipBinding.java, ValueObject.java
>
>
> I have the following class structure:
> ValueObject
>     Relationship
>         RelationshipBinding
>             Participant
>             Client
>             Provider
>             Employee
> ValueObject is a EmbeddableSuperClass which Relationship extends.  Relationship has a @OneToMany bidirectional association with RelationshipBinding.  Participant, Client, Provider, and Employee extend RelationshipBinding using the JOIN strategy.  The Participant and Employee VOs have associations to Contact objects (@OneToOne) ... works fine.  The Client and Provider VOs have associations to ClientContact and ProviderContact objects, respectively, using a bidirectional @OneToMany.  Strangley, when I query for a Provider, I get the following stack trace:
> 11:42:28,279 ERROR [BasicPropertyAccessor] IllegalArgumentException in class: com.tasconline.client.ClientContact, setter method of property: client
> 11:42:28,279 ERROR [BasicPropertyAccessor] expected type: com.tasconline.client.Client, actual value: com.tasconline.provider.Provider
> 11:42:28,279 INFO  [DefaultLoadEventListener] Error performing load command
> org.hibernate.PropertyAccessException: IllegalArgumentException occurred while calling setter of com.tasconline.client.ClientContact.client
>         at org.hibernate.property.BasicPropertyAccessor$BasicSetter.set(BasicPropertyAccessor.java:104)
>         at org.hibernate.tuple.AbstractEntityTuplizer.setPropertyValues(AbstractEntityTuplizer.java:330)
>         at org.hibernate.tuple.PojoEntityTuplizer.setPropertyValues(PojoEntityTuplizer.java:188)
>         at org.hibernate.persister.entity.AbstractEntityPersister.setPropertyValues(AbstractEntityPersister.java:3231)
>         at org.hibernate.engine.TwoPhaseLoad.initializeEntity(TwoPhaseLoad.java:126)
>         at org.hibernate.loader.Loader.initializeEntitiesAndCollections(Loader.java:842)
>         at org.hibernate.loader.Loader.doQuery(Loader.java:717)
>         at org.hibernate.loader.Loader.doQueryAndInitializeNonLazyCollections(Loader.java:223)
>         at org.hibernate.loader.Loader.loadEntity(Loader.java:1782)
>         at org.hibernate.loader.entity.AbstractEntityLoader.load(AbstractEntityLoader.java:93)
>         at org.hibernate.loader.entity.AbstractEntityLoader.load(AbstractEntityLoader.java:81)
>         at org.hibernate.persister.entity.AbstractEntityPersister.load(AbstractEntityPersister.java:2729)
>         at org.hibernate.event.def.DefaultLoadEventListener.loadFromDatasource(DefaultLoadEventListener.java:365)
>         at org.hibernate.event.def.DefaultLoadEventListener.doLoad(DefaultLoadEventListener.java:346)
>         at org.hibernate.event.def.DefaultLoadEventListener.load(DefaultLoadEventListener.java:123)
>         at org.hibernate.event.def.DefaultLoadEventListener.proxyOrLoad(DefaultLoadEventListener.java:177)
>         at org.hibernate.event.def.DefaultLoadEventListener.onLoad(DefaultLoadEventListener.java:87)
>         at org.hibernate.impl.SessionImpl.fireLoad(SessionImpl.java:781)
>         at org.hibernate.impl.SessionImpl.internalLoad(SessionImpl.java:753)
>         at org.hibernate.type.EntityType.resolveIdentifier(EntityType.java:266)
>         at org.hibernate.type.EntityType.resolve(EntityType.java:303)
>         at org.hibernate.engine.TwoPhaseLoad.initializeEntity(TwoPhaseLoad.java:113)
>         at org.hibernate.loader.Loader.initializeEntitiesAndCollections(Loader.java:842)
>         at org.hibernate.loader.Loader.doQuery(Loader.java:717)
>         at org.hibernate.loader.Loader.doQueryAndInitializeNonLazyCollections(Loader.java:223)
>         at org.hibernate.loader.Loader.doList(Loader.java:2147)
>         at org.hibernate.loader.Loader.listIgnoreQueryCache(Loader.java:2026)
>         at org.hibernate.loader.Loader.list(Loader.java:2021)
>         at org.hibernate.loader.hql.QueryLoader.list(QueryLoader.java:369)
>         at org.hibernate.hql.ast.QueryTranslatorImpl.list(QueryTranslatorImpl.java:296)
>         at org.hibernate.impl.SessionImpl.list(SessionImpl.java:992)
>         at org.hibernate.impl.QueryImpl.list(QueryImpl.java:74)
>         at org.hibernate.impl.AbstractQueryImpl.uniqueResult(AbstractQueryImpl.java:650)
>         at org.hibernate.ejb.QueryImpl.getSingleResult(QueryImpl.java:43)
>         at com.tasconline.provider.service.bean.ProviderServiceBean.findProvider(ProviderServiceBean.java:563)
>         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:109)
>         at org.jboss.ejb3.AllowedOperationsInterceptor.invoke(AllowedOperationsInterceptor.java:32)
>         at org.jboss.aop.joinpoint.MethodInvocation.invokeNext(MethodInvocation.java:98)
>         at org.jboss.aspects.tx.TxPolicy.invokeInOurTx(TxPolicy.java:66)
>         at org.jboss.aspects.tx.TxInterceptor$Required.invoke(TxInterceptor.java:134)
>         at org.jboss.aop.joinpoint.MethodInvocation.invokeNext(MethodInvocation.java:98)
>         at org.jboss.aspects.tx.TxPropagationInterceptor.invoke(TxPropagationInterceptor.java:61)
>         at org.jboss.aop.joinpoint.MethodInvocation.invokeNext(MethodInvocation.java:98)
>         at org.jboss.ejb3.stateless.StatelessInstanceInterceptor.invoke(StatelessInstanceInterceptor.java:39)
>         at org.jboss.aop.joinpoint.MethodInvocation.invokeNext(MethodInvocation.java:98)
>         at org.jboss.aspects.security.RoleBasedAuthorizationInterceptor.invoke(RoleBasedAuthorizationInterceptor.java:151)
>         at org.jboss.ejb3.security.RoleBasedAuthorizationInterceptor.invoke(RoleBasedAuthorizationInterceptor.java:85)
>         at org.jboss.aop.joinpoint.MethodInvocation.invokeNext(MethodInvocation.java:98)
>         at org.jboss.aspects.security.AuthenticationInterceptor.invoke(AuthenticationInterceptor.java:63)
>         at org.jboss.aop.joinpoint.MethodInvocation.invokeNext(MethodInvocation.java:98)
>         at org.jboss.ejb3.ENCPropagationInterceptor.invoke(ENCPropagationInterceptor.java:32)
>         at org.jboss.aop.joinpoint.MethodInvocation.invokeNext(MethodInvocation.java:98)
>         at org.jboss.ejb3.asynchronous.AsynchronousInterceptor.invoke(AsynchronousInterceptor.java:91)
>         at org.jboss.aop.joinpoint.MethodInvocation.invokeNext(MethodInvocation.java:98)
>         at org.jboss.ejb3.stateless.StatelessContainer.dynamicInvoke(StatelessContainer.java:204)
>         at org.jboss.aop.Dispatcher.invoke(Dispatcher.java:107)
>         at org.jboss.aspects.remoting.AOPRemotingInvocationHandler.invoke(AOPRemotingInvocationHandler.java:69)
>         at org.jboss.remoting.ServerInvoker.invoke(ServerInvoker.java:566)
>         at org.jboss.remoting.ServerInvoker.invoke(ServerInvoker.java:436)
>         at org.jboss.remoting.transport.socket.ServerThread.processInvocation(ServerThread.java:239)
>         at org.jboss.remoting.transport.socket.ServerThread.dorun(ServerThread.java:277)
>         at org.jboss.remoting.transport.socket.ServerThread.run(ServerThread.java:168)
> Caused by: java.lang.IllegalArgumentException: argument type mismatch
>         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.hibernate.property.BasicPropertyAccessor$BasicSetter.set(BasicPropertyAccessor.java:42)
>         ... 65 more
> Here's the query and code where the error occurs:
> SELECT p 
> FROM Provider p
> WHERE p.relationship.relationshipId LIKE :expression OR
>             p.taxId LIKE :expression OR 
>             p.organizationName LIKE :expression
> Here's the code that calls the query:
> List<Provider> queryResults = (List<Provider>) this.entityManager
>             .createQuery(FIND_PROVIDER_FOR_TASC_FORCE_QUERY)
>             .setParameter("expression", expression)
>             .getResultList();
> Note that FIND_PROVIDER_FOR_TASC_FORCE_QUERY is the query string above.
> I've tried different query formats and event Query.getSingleResult() ... all produce the same error.  I posted the problem on the forum (along with reading just about all the EJB3 and Hibernate documentation).

-- 
This message is automatically generated by JIRA.
-
If you think it was sent incorrectly contact one of the administrators: http://jira.jboss.com/jira/secure/Administrators.jspa
-
For more information on JIRA, see: http://www.atlassian.com/software/jira

        



More information about the jboss-jira mailing list