You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@openjpa.apache.org by "Albert Lee (JIRA)" <ji...@apache.org> on 2013/03/27 15:09:30 UTC

[jira] [Updated] (OPENJPA-2359) Output warning of ClassCastException when multiple entities share the same db table but with inconsistency field definitions

     [ https://issues.apache.org/jira/browse/OPENJPA-2359?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel ]

Albert Lee updated OPENJPA-2359:
--------------------------------

    Patch Info: Patch Available
    
> Output warning of ClassCastException when multiple entities share the same db table but with inconsistency field definitions
> ----------------------------------------------------------------------------------------------------------------------------
>
>                 Key: OPENJPA-2359
>                 URL: https://issues.apache.org/jira/browse/OPENJPA-2359
>             Project: OpenJPA
>          Issue Type: Improvement
>          Components: jpa
>    Affects Versions: 2.0.1, 2.1.1, 2.3.0, 2.2.1, 2.2.1.1
>            Reporter: Albert Lee
>            Priority: Minor
>         Attachments: OPENJPA-2359.20x.testcase.patch
>
>
> A ClassCastException similar to the following is thrown when multiple entities share the same db table but with inconsistency field definitions.
> <openjpa-2.0.2-SNAPSHOT-r422266:1392660 nonfatal general error> org.apache.openjpa.persistence.PersistenceException: java.lang.String incompatible with java.util.Date
> FailedObject: 1 [org.apache.openjpa.util.StringId] [java.lang.String]
> 	at org.apache.openjpa.kernel.BrokerImpl.find(BrokerImpl.java:989)
> 	at org.apache.openjpa.kernel.BrokerImpl.find(BrokerImpl.java:883)
> 	at org.apache.openjpa.kernel.DelegatingBroker.find(DelegatingBroker.java:223)
> 	at org.apache.openjpa.persistence.EntityManagerImpl.find(EntityManagerImpl.java:477)
> 	at org.apache.openjpa.persistence.query.TestPMRDateString.testSimple(TestPMRDateString.java:60)
> 	at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
> 	at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:60)
> 	at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:37)
> 	at java.lang.reflect.Method.invoke(Method.java:611)
> 	at junit.framework.TestCase.runTest(TestCase.java:154)
> 	at org.apache.openjpa.persistence.test.AbstractPersistenceTestCase.runTest(AbstractPersistenceTestCase.java:516)
> 	at junit.framework.TestCase.runBare(TestCase.java:127)
> 	at org.apache.openjpa.persistence.test.AbstractPersistenceTestCase.runBare(AbstractPersistenceTestCase.java:503)
> 	at org.apache.openjpa.persistence.test.AbstractPersistenceTestCase.runBare(AbstractPersistenceTestCase.java:479)
> 	at junit.framework.TestResult$1.protect(TestResult.java:106)
> 	at junit.framework.TestResult.runProtected(TestResult.java:124)
> 	at junit.framework.TestResult.run(TestResult.java:109)
> 	at junit.framework.TestCase.run(TestCase.java:118)
> 	at org.apache.openjpa.persistence.test.AbstractPersistenceTestCase.run(AbstractPersistenceTestCase.java:179)
> 	at junit.framework.TestSuite.runTest(TestSuite.java:208)
> 	at junit.framework.TestSuite.run(TestSuite.java:203)
> 	at org.eclipse.jdt.internal.junit.runner.junit3.JUnit3TestReference.run(JUnit3TestReference.java:130)
> 	at org.eclipse.jdt.internal.junit.runner.TestExecution.run(TestExecution.java:38)
> 	at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:467)
> 	at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:683)
> 	at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.run(RemoteTestRunner.java:390)
> 	at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.main(RemoteTestRunner.java:197)
> Caused by: java.lang.ClassCastException: java.lang.String incompatible with java.util.Date
> 	at org.apache.openjpa.kernel.SingleFieldManager.proxy(SingleFieldManager.java:107)
> 	at org.apache.openjpa.kernel.StateManagerImpl.storeObjectField(StateManagerImpl.java:2607)
> 	at org.apache.openjpa.kernel.StateManagerImpl.storeField(StateManagerImpl.java:2707)
> 	at org.apache.openjpa.kernel.StateManagerImpl.storeField(StateManagerImpl.java:882)
> 	at org.apache.openjpa.kernel.StateManagerImpl.store(StateManagerImpl.java:878)
> 	at org.apache.openjpa.jdbc.meta.strats.HandlerFieldStrategy.load(HandlerFieldStrategy.java:199)
> 	at org.apache.openjpa.jdbc.meta.FieldMapping.load(FieldMapping.java:928)
> 	at org.apache.openjpa.jdbc.kernel.JDBCStoreManager.load(JDBCStoreManager.java:1112)
> 	at org.apache.openjpa.jdbc.kernel.JDBCStoreManager.load(JDBCStoreManager.java:1056)
> 	at org.apache.openjpa.jdbc.kernel.JDBCStoreManager.initializeState(JDBCStoreManager.java:427)
> 	at org.apache.openjpa.jdbc.kernel.JDBCStoreManager.initialize(JDBCStoreManager.java:322)
> 	at org.apache.openjpa.kernel.DelegatingStoreManager.initialize(DelegatingStoreManager.java:112)
> 	at org.apache.openjpa.kernel.ROPStoreManager.initialize(ROPStoreManager.java:57)
> 	at org.apache.openjpa.kernel.BrokerImpl.initialize(BrokerImpl.java:1008)
> 	at org.apache.openjpa.kernel.BrokerImpl.find(BrokerImpl.java:966)
> 	... 26 more
> See the attached test case's entities field definitions:
>     @Temporal(TemporalType.DATE)
>     @Column(name = "EFF_FROM_DT")
>     private Date effFromDt;
>     // @Temporal(TemporalType.DATE)
>     @Column(name = "EFF_FROM_DT")
>     private String effFromDt;
> This is an application problem but would be nice for OpenJPA to provide more diagnostic is this happens so that user can catch the problem and get it fix easier.

--
This message is automatically generated by JIRA.
If you think it was sent incorrectly, please contact your JIRA administrators
For more information on JIRA, see: http://www.atlassian.com/software/jira