openjpa-dev mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From "Vikram Bhatia (JIRA)" <j...@apache.org>
Subject [jira] Commented: (OPENJPA-660) ClassCastException when using OneToMany Relation and collection is subclass using Discriminator with SINGLE_TABLE strategy.
Date Wed, 16 Jul 2008 17:28:31 GMT

    [ https://issues.apache.org/jira/browse/OPENJPA-660?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=12614027#action_12614027
] 

Vikram Bhatia commented on OPENJPA-660:
---------------------------------------

Thanks Pinaki for the suggestion, but it is causing 

2640  testInheritance  TRACE  [main] openjpa.jdbc.SQL - <t 6889270, conn 20693770> executing
prepstmnt 89154
06 SELECT t0.ssn, t0.type, t0.salary FROM EMP t0 WHERE t0.DEPT_NAME = ? AND t0.type = ? [params=(String)
Mat
hs]
2656  testInheritance  TRACE  [main] openjpa.jdbc.SQL - <t 6889270, conn 20693770> [0
ms] spent
E
Time: 3.281
There was 1 error:
1) testInheritance(com.test.jpa.inheritance.TestCollection)<openjpa-1.2.0-SNAPSHOT-r422266:676787
nonfatal g
eneral error> org.apache.openjpa.persistence.PersistenceException: ORA-01008: not all variables
bound
 {prepstmnt 5084131 SELECT t0.ssn, t0.type, t0.salary FROM EMP t0 WHERE t0.DEPT_NAME = ? AND
t0.type = ? [pa
rams=(String) Maths]} [code=1008, state=72000]
        at org.apache.openjpa.jdbc.sql.DBDictionary.narrow(DBDictionary.java:4228)
        at org.apache.openjpa.jdbc.sql.DBDictionary.newStoreException(DBDictionary.java:4193)
        at org.apache.openjpa.jdbc.sql.SQLExceptions.getStore(SQLExceptions.java:102)
        at org.apache.openjpa.jdbc.sql.SQLExceptions.getStore(SQLExceptions.java:88)
        at org.apache.openjpa.jdbc.sql.SQLExceptions.getStore(SQLExceptions.java:64)
        at org.apache.openjpa.jdbc.kernel.JDBCStoreManager.load(JDBCStoreManager.java:613)
        at org.apache.openjpa.kernel.DelegatingStoreManager.load(DelegatingStoreManager.java:116)
        at org.apache.openjpa.kernel.ROPStoreManager.load(ROPStoreManager.java:78)
        at org.apache.openjpa.kernel.StateManagerImpl.loadFields(StateManagerImpl.java:2919)
        at org.apache.openjpa.kernel.StateManagerImpl.loadField(StateManagerImpl.java:2997)
        at org.apache.openjpa.kernel.StateManagerImpl.beforeAccessField(StateManagerImpl.java:1491)
        at org.apache.openjpa.kernel.StateManagerImpl.accessingField(StateManagerImpl.java:1476)
        at com.test.jpa.inheritance.Department.pcGetfullTimeEmployees(Department.java)
        at com.test.jpa.inheritance.Department.getFullTimeEmployees(Department.java:30)
        at com.test.jpa.inheritance.TestCollection.testInheritance(TestCollection.java:52)
        at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
        at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
        at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
Caused by: org.apache.openjpa.lib.jdbc.ReportingSQLException: ORA-01008: not all variables
bound
 {prepstmnt 5084131 SELECT t0.ssn, t0.type, t0.salary FROM EMP t0 WHERE t0.DEPT_NAME = ? AND
t0.type = ? [pa
rams=(String) Maths]} [code=1008, state=72000]
        at org.apache.openjpa.lib.jdbc.LoggingConnectionDecorator.wrap(LoggingConnectionDecorator.java:192)
        at org.apache.openjpa.lib.jdbc.LoggingConnectionDecorator.access$700(LoggingConnectionDecorator.java
:57)
        at org.apache.openjpa.lib.jdbc.LoggingConnectionDecorator$LoggingConnection$LoggingPreparedStatement
.executeQuery(LoggingConnectionDecorator.java:852)
        at org.apache.openjpa.lib.jdbc.DelegatingPreparedStatement.executeQuery(DelegatingPreparedStatement.
java:262)
        at org.apache.openjpa.jdbc.kernel.JDBCStoreManager$CancelPreparedStatement.executeQuery(JDBCStoreMan
ager.java:1494)
        at org.apache.openjpa.lib.jdbc.DelegatingPreparedStatement.executeQuery(DelegatingPreparedStatement.
java:252)

It looks like it is svn r652913 (OPENJPA-407) which has made changes in StoreCollectionFieldStrategy.load()
method resulting in this issue.

            ClassMapping mapping = field.getDefiningMapping();
            Object oid = sm.getObjectId();
            Column[] cols = mapping.getPrimaryKeyColumns();
            if (sel == null)
                sel = ((LogicalUnion.UnionSelect)union.getSelects()[0]).
                getDelegate();

            sel.wherePrimaryKey(mapping, cols, cols, oid, store, 
                	null, null, parmList);

> ClassCastException when using OneToMany Relation and collection is subclass using Discriminator
with SINGLE_TABLE strategy.
> ---------------------------------------------------------------------------------------------------------------------------
>
>                 Key: OPENJPA-660
>                 URL: https://issues.apache.org/jira/browse/OPENJPA-660
>             Project: OpenJPA
>          Issue Type: Bug
>          Components: jpa
>    Affects Versions: 1.0.0, 1.0.1, 1.0.2, 1.0.3, 1.0.4, 1.1.0, 1.1.1, 1.2.0
>            Reporter: Vikram Bhatia
>         Attachments: testInheritance.zip
>
>
> If the entity has OneToMany relation and collection is declared as subclass which uses
SINGLE_TABLE inheritance strategy, it fetches all rows irrespective of Discriminator value
and throws ClassCastException.
> There is entity Department (table dept) having OneToMany relation with another entity
FullTimeEmployee. 
>   @OneToMany (mappedBy="dept", cascade=CascadeType.ALL)
>   private Collection<FullTimeEmployee> fullTimeEmployees;
> There is abstract class Employee with
> @Inheritance(strategy=InheritanceType.SINGLE_TABLE)
> @DiscriminatorColumn(name="TYPE")
> There are two entity classes FullTimeEmployee and PartTimeEmployee which extends Employee
(table emp) with Discriminator values 'F' and 'P' respectively.
> Now, suppose emp table contains 2 rows of PartTimeEmployee and 2 rows of FullTimeEmployee
and if test class fetches Department object and calls dept.getFullTimeEmployees(), it throws
ClassCastException as it gets 4 rows and doesn't use discriminator and subclass type while
generating SQL query.

-- 
This message is automatically generated by JIRA.
-
You can reply to this email to add a comment to the issue online.


Mime
View raw message