You are viewing a plain text version of this content. The canonical link for it is here.
Posted to users@tomee.apache.org by "gchauvet@zatarox.com" <gc...@zatarox.com> on 2015/06/21 10:20:41 UTC
OpenEJB/OpenJPA: Entity cannot be cast to Number
Hi,
I use OpenEJB for my unitary tests, and I'm facing to an exception, with the
following stack trace :
FailedObject: com.zatarox.rageweak.model.Summoner@df4ab [java.lang.String]
at org.apache.openjpa.kernel.BrokerImpl.attach(BrokerImpl.java:3515)
at
org.apache.openjpa.kernel.DelegatingBroker.attach(DelegatingBroker.java:1213)
at
org.apache.openjpa.persistence.EntityManagerImpl.merge(EntityManagerImpl.java:877)
at
org.apache.openejb.persistence.JtaEntityManager.merge(JtaEntityManager.java:159)
at
com.zatarox.rageweak.backend.ParticipantSessionBean.find(ParticipantSessionBean.java:70)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at
sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
at
sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:497)
at
org.apache.openejb.core.interceptor.ReflectionInvocationContext$Invocation.invoke(ReflectionInvocationContext.java:192)
at
org.apache.openejb.core.interceptor.ReflectionInvocationContext.proceed(ReflectionInvocationContext.java:173)
at
org.apache.openejb.monitoring.StatsInterceptor.record(StatsInterceptor.java:181)
at
org.apache.openejb.monitoring.StatsInterceptor.invoke(StatsInterceptor.java:100)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at
sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
at
sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:497)
at
org.apache.openejb.core.interceptor.ReflectionInvocationContext$Invocation.invoke(ReflectionInvocationContext.java:192)
at
org.apache.openejb.core.interceptor.ReflectionInvocationContext.proceed(ReflectionInvocationContext.java:173)
at
org.apache.openejb.core.interceptor.InterceptorStack.invoke(InterceptorStack.java:85)
at
org.apache.openejb.core.stateless.StatelessContainer._invoke(StatelessContainer.java:227)
at
org.apache.openejb.core.stateless.StatelessContainer.invoke(StatelessContainer.java:194)
at
org.apache.openejb.core.ivm.EjbObjectProxyHandler.synchronizedBusinessMethod(EjbObjectProxyHandler.java:308)
at
org.apache.openejb.core.ivm.EjbObjectProxyHandler.businessMethod(EjbObjectProxyHandler.java:303)
at
org.apache.openejb.core.ivm.EjbObjectProxyHandler._invoke(EjbObjectProxyHandler.java:92)
at
org.apache.openejb.core.ivm.BaseEjbProxyHandler.invoke(BaseEjbProxyHandler.java:322)
at
com.zatarox.rageweak.backend.ParticipantSessionBean$$LocalBeanProxy.find(com/zatarox/rageweak/backend/ParticipantSessionBean.java)
at
com.zatarox.rageweak.backend.ParticipantSessionTest.getParticipant(ParticipantSessionTest.java:35)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at
sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
at
sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:497)
at
org.junit.runners.model.FrameworkMethod$1.runReflectiveCall(FrameworkMethod.java:50)
at
org.junit.internal.runners.model.ReflectiveCallable.run(ReflectiveCallable.java:12)
at
org.junit.runners.model.FrameworkMethod.invokeExplosively(FrameworkMethod.java:47)
at
org.junit.internal.runners.statements.InvokeMethod.evaluate(InvokeMethod.java:17)
at
org.junit.internal.runners.statements.RunBefores.evaluate(RunBefores.java:26)
at
org.junit.internal.runners.statements.RunAfters.evaluate(RunAfters.java:27)
at org.junit.runners.ParentRunner.runLeaf(ParentRunner.java:325)
at
org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:78)
at
org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:57)
at org.junit.runners.ParentRunner$3.run(ParentRunner.java:290)
at org.junit.runners.ParentRunner$1.schedule(ParentRunner.java:71)
at org.junit.runners.ParentRunner.runChildren(ParentRunner.java:288)
at org.junit.runners.ParentRunner.access$000(ParentRunner.java:58)
at org.junit.runners.ParentRunner$2.evaluate(ParentRunner.java:268)
at org.junit.runners.ParentRunner.run(ParentRunner.java:363)
at
org.apache.maven.surefire.junit4.JUnit4TestSet.execute(JUnit4TestSet.java:53)
at
org.apache.maven.surefire.junit4.JUnit4Provider.executeTestSet(JUnit4Provider.java:123)
at
org.apache.maven.surefire.junit4.JUnit4Provider.invoke(JUnit4Provider.java:104)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at
sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
at
sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:497)
at
org.apache.maven.surefire.util.ReflectionUtils.invokeMethodWithArray(ReflectionUtils.java:164)
at
org.apache.maven.surefire.booter.ProviderFactory$ProviderProxy.invoke(ProviderFactory.java:110)
at
org.apache.maven.surefire.booter.SurefireStarter.invokeProvider(SurefireStarter.java:175)
at
org.apache.maven.surefire.booter.SurefireStarter.runSuitesInProcessWhenForked(SurefireStarter.java:107)
at org.apache.maven.surefire.booter.ForkedBooter.main(ForkedBooter.java:68)
Caused by: java.lang.ClassCastException: com.zatarox.rageweak.model.Platform
cannot be cast to java.lang.Number
at
org.apache.openjpa.util.ApplicationIds$PrimaryKeyFieldManager.fetchShortField(ApplicationIds.java:660)
at
org.apache.openjpa.enhance.com$zatarox$rageweak$model$Summoner$pcsubclass.pcCopyKeyFieldsToObjectId(Unknown
Source)
at
org.apache.openjpa.enhance.PCRegistry.copyKeyFieldsToObjectId(PCRegistry.java:169)
at
org.apache.openjpa.util.ApplicationIds.fromPKValues(ApplicationIds.java:223)
at
org.apache.openjpa.enhance.ReflectingPersistenceCapable.pcNewObjectIdInstance(ReflectingPersistenceCapable.java:277)
at org.apache.openjpa.util.ApplicationIds.create(ApplicationIds.java:426)
at org.apache.openjpa.kernel.BrokerImpl.isDetached(BrokerImpl.java:4624)
at org.apache.openjpa.kernel.BrokerImpl.isDetached(BrokerImpl.java:4597)
at
org.apache.openjpa.kernel.VersionAttachStrategy.attach(VersionAttachStrategy.java:83)
at org.apache.openjpa.kernel.AttachManager.attach(AttachManager.java:252)
at org.apache.openjpa.kernel.AttachManager.attach(AttachManager.java:105)
at org.apache.openjpa.kernel.BrokerImpl.attach(BrokerImpl.java:3508)
... 58 more
The two classes pointed in the exception are defined like this:
Summoner.java :
=====================
@IdClass(Summoner.SummonerId.class)
public class Summoner implements Serializable {
private static final long serialVersionUID = 0L;
public static class SummonerId implements Serializable {
private static final long serialVersionUID = 0L;
private long id;
private short platform;
public SummonerId() {
}
public long getId() {
return id;
}
public void setId(long id) {
this.id = id;
}
public short getPlatform() {
return platform;
}
public void setPlatform(short platform) {
this.platform = platform;
}
@Override
public int hashCode() {
int result = 0;
if(id > 0) {
result ^= ((Long)id).hashCode();
}
if(platform > 0) {
result ^= ((Short)platform).hashCode();
}
return result;
}
@Override
public boolean equals(Object obj) {
if (obj == null) {
return false;
}
if (getClass() != obj.getClass()) {
return false;
}
final SummonerId other = (SummonerId) obj;
if (this.id != other.id) {
return false;
}
if (this.platform != other.platform) {
return false;
}
return true;
}
};
public static final String FIND_PARTICIPANTS = "SUMMONERS.FIND.SUBSET";
@Id
@Column(name = "id")
private long id;
@Id
@ManyToOne(optional = false, cascade = {CascadeType.DETACH,
CascadeType.PERSIST, CascadeType.REFRESH})
@JoinColumn(name = "platform_id")
private Platform platform;
/** getters/setters & other stuff**/
}
Platform.java:
=====================
public class Platform implements Serializable {
private static final long serialVersionUID = 0L;
public static final String FIND_BY_REGION = "PLATFORM.FIND.REGION";
@Id
@GeneratedValue(strategy = GenerationType.AUTO)
private short id;
@Column(updatable = false, unique = true)
private String name;
@Column(updatable = false, unique = true)
private String region;
/** getters/setters & other stuff**/
}
Note: I've wrotten a small unitary UT with JPA only, mapping seems good, and
i've no exception.
--
View this message in context: http://tomee-openejb.979440.n4.nabble.com/OpenEJB-OpenJPA-Entity-cannot-be-cast-to-Number-tp4675369.html
Sent from the TomEE Users mailing list archive at Nabble.com.
Re: OpenEJB/OpenJPA: Entity cannot be cast to Number
Posted by Romain Manni-Bucau <rm...@gmail.com>.
Hi
Think updating nonfinal openjpa to final version (now released) should
solve it
Le 21 juin 2015 13:42, "gchauvet" <gc...@zatarox.com> a écrit :
> Hi,
>
> My test environment :
> ===================
> Maven 3.0
> OpenEJB 4.7.2
> JUnit 4.12
>
> My OpenJPA entity test environment:
> ===================
> Maven 3.0
> OpenJPA 2.4.0
> JUnit 4.12
>
> It's seems like OpenJPA don't understand how to map my composite primary
> key
> through OpenEJB
>
>
>
> --
> View this message in context:
> http://tomee-openejb.979440.n4.nabble.com/OpenEJB-OpenJPA-Entity-cannot-be-cast-to-Number-tp4675369p4675371.html
> Sent from the TomEE Users mailing list archive at Nabble.com.
>
Re: OpenEJB/OpenJPA: Entity cannot be cast to Number
Posted by gchauvet <gc...@zatarox.com>.
Hi,
My test environment :
===================
Maven 3.0
OpenEJB 4.7.2
JUnit 4.12
My OpenJPA entity test environment:
===================
Maven 3.0
OpenJPA 2.4.0
JUnit 4.12
It's seems like OpenJPA don't understand how to map my composite primary key
through OpenEJB
--
View this message in context: http://tomee-openejb.979440.n4.nabble.com/OpenEJB-OpenJPA-Entity-cannot-be-cast-to-Number-tp4675369p4675371.html
Sent from the TomEE Users mailing list archive at Nabble.com.
Re: OpenEJB/OpenJPA: Entity cannot be cast to Number
Posted by Romain Manni-Bucau <rm...@gmail.com>.
Hi
Which versions for both tests?
Le 21 juin 2015 10:42, "gchauvet@zatarox.com" <gc...@zatarox.com> a
écrit :
> Hi,
>
> I use OpenEJB for my unitary tests, and I'm facing to an exception, with
> the
> following stack trace :
>
> FailedObject: com.zatarox.rageweak.model.Summoner@df4ab [java.lang.String]
> at
> org.apache.openjpa.kernel.BrokerImpl.attach(BrokerImpl.java:3515)
> at
>
> org.apache.openjpa.kernel.DelegatingBroker.attach(DelegatingBroker.java:1213)
> at
>
> org.apache.openjpa.persistence.EntityManagerImpl.merge(EntityManagerImpl.java:877)
> at
>
> org.apache.openejb.persistence.JtaEntityManager.merge(JtaEntityManager.java:159)
> at
>
> com.zatarox.rageweak.backend.ParticipantSessionBean.find(ParticipantSessionBean.java:70)
> at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
> at
>
> sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
> at
>
> sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
> at java.lang.reflect.Method.invoke(Method.java:497)
> at
>
> org.apache.openejb.core.interceptor.ReflectionInvocationContext$Invocation.invoke(ReflectionInvocationContext.java:192)
> at
>
> org.apache.openejb.core.interceptor.ReflectionInvocationContext.proceed(ReflectionInvocationContext.java:173)
> at
>
> org.apache.openejb.monitoring.StatsInterceptor.record(StatsInterceptor.java:181)
> at
>
> org.apache.openejb.monitoring.StatsInterceptor.invoke(StatsInterceptor.java:100)
> at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
> at
>
> sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
> at
>
> sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
> at java.lang.reflect.Method.invoke(Method.java:497)
> at
>
> org.apache.openejb.core.interceptor.ReflectionInvocationContext$Invocation.invoke(ReflectionInvocationContext.java:192)
> at
>
> org.apache.openejb.core.interceptor.ReflectionInvocationContext.proceed(ReflectionInvocationContext.java:173)
> at
>
> org.apache.openejb.core.interceptor.InterceptorStack.invoke(InterceptorStack.java:85)
> at
>
> org.apache.openejb.core.stateless.StatelessContainer._invoke(StatelessContainer.java:227)
> at
>
> org.apache.openejb.core.stateless.StatelessContainer.invoke(StatelessContainer.java:194)
> at
>
> org.apache.openejb.core.ivm.EjbObjectProxyHandler.synchronizedBusinessMethod(EjbObjectProxyHandler.java:308)
> at
>
> org.apache.openejb.core.ivm.EjbObjectProxyHandler.businessMethod(EjbObjectProxyHandler.java:303)
> at
>
> org.apache.openejb.core.ivm.EjbObjectProxyHandler._invoke(EjbObjectProxyHandler.java:92)
> at
>
> org.apache.openejb.core.ivm.BaseEjbProxyHandler.invoke(BaseEjbProxyHandler.java:322)
> at
>
> com.zatarox.rageweak.backend.ParticipantSessionBean$$LocalBeanProxy.find(com/zatarox/rageweak/backend/ParticipantSessionBean.java)
> at
>
> com.zatarox.rageweak.backend.ParticipantSessionTest.getParticipant(ParticipantSessionTest.java:35)
> at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
> at
>
> sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
> at
>
> sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
> at java.lang.reflect.Method.invoke(Method.java:497)
> at
>
> org.junit.runners.model.FrameworkMethod$1.runReflectiveCall(FrameworkMethod.java:50)
> at
>
> org.junit.internal.runners.model.ReflectiveCallable.run(ReflectiveCallable.java:12)
> at
>
> org.junit.runners.model.FrameworkMethod.invokeExplosively(FrameworkMethod.java:47)
> at
>
> org.junit.internal.runners.statements.InvokeMethod.evaluate(InvokeMethod.java:17)
> at
>
> org.junit.internal.runners.statements.RunBefores.evaluate(RunBefores.java:26)
> at
> org.junit.internal.runners.statements.RunAfters.evaluate(RunAfters.java:27)
> at org.junit.runners.ParentRunner.runLeaf(ParentRunner.java:325)
> at
>
> org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:78)
> at
>
> org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:57)
> at org.junit.runners.ParentRunner$3.run(ParentRunner.java:290)
> at org.junit.runners.ParentRunner$1.schedule(ParentRunner.java:71)
> at
> org.junit.runners.ParentRunner.runChildren(ParentRunner.java:288)
> at org.junit.runners.ParentRunner.access$000(ParentRunner.java:58)
> at org.junit.runners.ParentRunner$2.evaluate(ParentRunner.java:268)
> at org.junit.runners.ParentRunner.run(ParentRunner.java:363)
> at
>
> org.apache.maven.surefire.junit4.JUnit4TestSet.execute(JUnit4TestSet.java:53)
> at
>
> org.apache.maven.surefire.junit4.JUnit4Provider.executeTestSet(JUnit4Provider.java:123)
> at
>
> org.apache.maven.surefire.junit4.JUnit4Provider.invoke(JUnit4Provider.java:104)
> at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
> at
>
> sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
> at
>
> sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
> at java.lang.reflect.Method.invoke(Method.java:497)
> at
>
> org.apache.maven.surefire.util.ReflectionUtils.invokeMethodWithArray(ReflectionUtils.java:164)
> at
>
> org.apache.maven.surefire.booter.ProviderFactory$ProviderProxy.invoke(ProviderFactory.java:110)
> at
>
> org.apache.maven.surefire.booter.SurefireStarter.invokeProvider(SurefireStarter.java:175)
> at
>
> org.apache.maven.surefire.booter.SurefireStarter.runSuitesInProcessWhenForked(SurefireStarter.java:107)
> at
> org.apache.maven.surefire.booter.ForkedBooter.main(ForkedBooter.java:68)
> Caused by: java.lang.ClassCastException:
> com.zatarox.rageweak.model.Platform
> cannot be cast to java.lang.Number
> at
>
> org.apache.openjpa.util.ApplicationIds$PrimaryKeyFieldManager.fetchShortField(ApplicationIds.java:660)
> at
> org.apache.openjpa.enhance.com
> $zatarox$rageweak$model$Summoner$pcsubclass.pcCopyKeyFieldsToObjectId(Unknown
> Source)
> at
>
> org.apache.openjpa.enhance.PCRegistry.copyKeyFieldsToObjectId(PCRegistry.java:169)
> at
>
> org.apache.openjpa.util.ApplicationIds.fromPKValues(ApplicationIds.java:223)
> at
>
> org.apache.openjpa.enhance.ReflectingPersistenceCapable.pcNewObjectIdInstance(ReflectingPersistenceCapable.java:277)
> at
> org.apache.openjpa.util.ApplicationIds.create(ApplicationIds.java:426)
> at
> org.apache.openjpa.kernel.BrokerImpl.isDetached(BrokerImpl.java:4624)
> at
> org.apache.openjpa.kernel.BrokerImpl.isDetached(BrokerImpl.java:4597)
> at
>
> org.apache.openjpa.kernel.VersionAttachStrategy.attach(VersionAttachStrategy.java:83)
> at
> org.apache.openjpa.kernel.AttachManager.attach(AttachManager.java:252)
> at
> org.apache.openjpa.kernel.AttachManager.attach(AttachManager.java:105)
> at
> org.apache.openjpa.kernel.BrokerImpl.attach(BrokerImpl.java:3508)
> ... 58 more
>
>
>
> The two classes pointed in the exception are defined like this:
> Summoner.java :
> =====================
> @IdClass(Summoner.SummonerId.class)
> public class Summoner implements Serializable {
>
> private static final long serialVersionUID = 0L;
>
> public static class SummonerId implements Serializable {
>
> private static final long serialVersionUID = 0L;
>
> private long id;
> private short platform;
>
> public SummonerId() {
> }
>
> public long getId() {
> return id;
> }
>
> public void setId(long id) {
> this.id = id;
> }
>
> public short getPlatform() {
> return platform;
> }
>
> public void setPlatform(short platform) {
> this.platform = platform;
> }
>
> @Override
> public int hashCode() {
> int result = 0;
> if(id > 0) {
> result ^= ((Long)id).hashCode();
> }
> if(platform > 0) {
> result ^= ((Short)platform).hashCode();
> }
> return result;
> }
>
> @Override
> public boolean equals(Object obj) {
> if (obj == null) {
> return false;
> }
> if (getClass() != obj.getClass()) {
> return false;
> }
> final SummonerId other = (SummonerId) obj;
> if (this.id != other.id) {
> return false;
> }
> if (this.platform != other.platform) {
> return false;
> }
> return true;
> }
>
> };
>
> public static final String FIND_PARTICIPANTS = "SUMMONERS.FIND.SUBSET";
>
> @Id
> @Column(name = "id")
> private long id;
> @Id
> @ManyToOne(optional = false, cascade = {CascadeType.DETACH,
> CascadeType.PERSIST, CascadeType.REFRESH})
> @JoinColumn(name = "platform_id")
> private Platform platform;
>
> /** getters/setters & other stuff**/
> }
>
> Platform.java:
> =====================
> public class Platform implements Serializable {
> private static final long serialVersionUID = 0L;
>
> public static final String FIND_BY_REGION = "PLATFORM.FIND.REGION";
>
> @Id
> @GeneratedValue(strategy = GenerationType.AUTO)
> private short id;
> @Column(updatable = false, unique = true)
> private String name;
> @Column(updatable = false, unique = true)
> private String region;
>
> /** getters/setters & other stuff**/
> }
>
> Note: I've wrotten a small unitary UT with JPA only, mapping seems good,
> and
> i've no exception.
>
>
>
> --
> View this message in context:
> http://tomee-openejb.979440.n4.nabble.com/OpenEJB-OpenJPA-Entity-cannot-be-cast-to-Number-tp4675369.html
> Sent from the TomEE Users mailing list archive at Nabble.com.
>