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 2011/06/09 22:10:58 UTC

[jira] [Work started] (OPENJPA-2015) ClassCastException when base entity class has InheritanceType.SINGLE_TABLE base with multiple entity subclasses

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

Work on OPENJPA-2015 started by Albert Lee.

> ClassCastException when base entity class has InheritanceType.SINGLE_TABLE base with multiple entity subclasses
> ---------------------------------------------------------------------------------------------------------------
>
>                 Key: OPENJPA-2015
>                 URL: https://issues.apache.org/jira/browse/OPENJPA-2015
>             Project: OpenJPA
>          Issue Type: Bug
>          Components: jpa
>    Affects Versions: 1.2.2, 1.2.3
>            Reporter: Albert Lee
>            Assignee: Albert Lee
>             Fix For: 1.2.3
>
>
> If multiple entity subclasses extends a entity base class using InheritanceType.SINGLE_TABLE, with mx1 relation from base class to itself, a ClassCastException may occur when the mx1 collection is not empty due to a problem in discriminating the proper entity subclass type.
> Caused by: java.lang.ClassCastException: problem.domain.InputItemRecord
> 	at problem.domain.InputBatchHeaderRecord.pcReplaceField(InputBatchHeaderRecord.java)
> 	at org.apache.openjpa.kernel.StateManagerImpl.replaceField(StateManagerImpl.java:3041)
> 	at org.apache.openjpa.kernel.StateManagerImpl.storeObjectField(StateManagerImpl.java:2473)
> 	at org.apache.openjpa.kernel.StateManagerImpl.storeObject(StateManagerImpl.java:2463)
> 	at org.apache.openjpa.jdbc.meta.strats.RelationFieldStrategy.loadEagerJoin(RelationFieldStrategy.java:541)
> 	at org.apache.openjpa.jdbc.meta.FieldMapping.loadEagerJoin(FieldMapping.java:807)
> 	at org.apache.openjpa.jdbc.kernel.JDBCStoreManager.load(JDBCStoreManager.java:1052)
> 	at org.apache.openjpa.jdbc.kernel.JDBCStoreManager.load(JDBCStoreManager.java:1012)
> 	at org.apache.openjpa.jdbc.kernel.JDBCStoreManager.initializeState(JDBCStoreManager.java:378)
> 	at org.apache.openjpa.jdbc.kernel.JDBCStoreManager.initialize(JDBCStoreManager.java:278)
> 	at org.apache.openjpa.kernel.DelegatingStoreManager.initialize(DelegatingStoreManager.java:111)
> 	at org.apache.openjpa.kernel.ROPStoreManager.initialize(ROPStoreManager.java:57)
> 	at org.apache.openjpa.kernel.BrokerImpl.initialize(BrokerImpl.java:913)
> 	at org.apache.openjpa.kernel.BrokerImpl.find(BrokerImpl.java:871)
> 	... 38 more
> For example:
> @Entity
> @Inheritance(strategy = InheritanceType.SINGLE_TABLE)
> @DiscriminatorColumn(name = "DISCRIMATOR", discriminatorType = DiscriminatorType.INTEGER)
> @DiscriminatorValue("99")
> public class NachaInputRecord {
>     @Id
>     public long identifier;
>    
>     @ManyToOne(cascade = CascadeType.MERGE,fetch=FetchType.EAGER)
>     @ForeignKey
>     @JoinColumn(name = "PARENT_ID")
>     private NachaInputRecord parent;
> ....
> @Entity
> @DiscriminatorValue("6")
> public class InputItemRecord extends NachaInputRecord {
> .....
> @Entity
> @DiscriminatorValue("8")
> public class InputBatchControlRecord extends NachaInputRecord {
> .....

--
This message is automatically generated by JIRA.
For more information on JIRA, see: http://www.atlassian.com/software/jira