[ 
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

Reply via email to