openjpa-dev mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From "Michael Dick (JIRA)" <j...@apache.org>
Subject [jira] Commented: (OPENJPA-206) Key column does not cascade multiple joins.
Date Fri, 11 May 2007 16:20:15 GMT

    [ https://issues.apache.org/jira/browse/OPENJPA-206?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel#action_12495089
] 

Michael Dick commented on OPENJPA-206:
--------------------------------------

For what it's worth I've been able to reproduce the issue with a "vanilla" junit test case
using the entities provided. 

i haven't been able to determine why Department is able to pick up the ID from Company, but
Employee can't pick up the IDs from Department. 

I've been able to get it "working" by persisting Department & Company objects in one transaction,
then adding the Employees in later. Is that an acceptable workaround for what you're trying
to do? 

> Key column does not cascade multiple joins.
> -------------------------------------------
>
>                 Key: OPENJPA-206
>                 URL: https://issues.apache.org/jira/browse/OPENJPA-206
>             Project: OpenJPA
>          Issue Type: Bug
>    Affects Versions: 0.9.7
>         Environment: WebSphere 6.1, DB2 v8.1
>            Reporter: Matt Anderson
>         Attachments: FunInheritanceJavaPI.zip
>
>
> Problem: Parent keys will not cascade beyond one generation.  Example: Company -->
Department --> Employee:  Company key will not cascade to Employee.
> The following example further describes this issue.
> A COMPANY table contains two columns, COMP_ID and NAME.  The COMP_ID column is the primary
key.
> A DEPARTMENT table contains three columns, COMP_ID, DEPT_ID, and NAME.  The COMP_ID and
DEPT_ID columns are the primary key columns.  The COMP_ID column is a foreign key column which
references the COMP_ID column in the COMPANY table.
> An EMPLOYEE table contains four columns, COMP_ID, DEPT_ID, EMP_ID, and NAME.  The COMP_ID,
DEPT_ID, and EMP_ID columns are the primary key columns.  The COMP_ID and DEPT_ID columns
are foreign key columns which reference the COMP_ID and DEPT_ID columns respectively in the
DEPARTMENT table.  
> An entity exists for each table, Company, Department, and Employee.  The Company entity
has three attributes, compId, name, and departments.  The compId attribute maps to the COMP_ID
column.  The name attribute maps to the NAME column.  The departments attribute maps a one-to-many
relationship to the Department entity.
> The Department entity has five attributes, compId, deptId, name, employees, and company.
 The compId attribute maps to the COMP_ID column.  The deptId attribute maps to the DEPT_ID
column.  The name attribute maps to the NAME column.  The employees attribute maps a one-to-many
relationship to the Employee entity.  The company attribute maps a many-to-one relationship
to the Company entity, joined by the COMP_ID column.
> The Employee entity has five attributes, compId, deptId, empId, name, and department.
 The compId attribute maps to the COMP_ID column.  The deptId attribute maps to the DEPT_ID
column.  The empId attribute maps to the EMP_ID column.  The name attribute maps to the NAME
column.  The department attribute maps a many-to-one relationship to the Department entity,
joined by the COMP_ID and DEPT_ID columns.
> Below are the eleven steps to re-create this problem.
> 1. A new Company entity is instantiated.
> 2. The name attribute on the Company instance is set to "company".
> 3. A new Department entity is instantiated.
> 4. The name attribute on the Department instance is set to "department".
> 5. The department attribute on the Company instance is set to the Department instance.
> 6. A new Employee entity is instantiated.
> 7. The name attribute on the Employee instance is set to "Frank".
> 8. The employee attribute on the Department instance is set to the Employee instance.
> 9. The Employee instance is added to the employees attribute on the Department instance.
> 10. The Department instance is added to the departments attribute on the Company instance.
> 11. The Company instance is persisted.
> The following SQL statements are executed.
> INSERT INTO COMPANY (COMP_ID, NAME) 
>     VALUES (?, ?) 
> [params=(long) 1, (String) company]
> INSERT INTO DEPARTMENT (COMP_ID, DEPT_ID, NAME) 
>     VALUES (?, ?, ?) 
> [params=(long) 1, (long) 1, (String) department]
> INSERT INTO EMPLOYEE (DEPT_ID, EMP_ID, NAME) 
>     VALUES (?, ?, ?) 
> [params=(long) 1, (long) 1, (String) Frank]
> A PersistenceException is thrown because of the DB2 error noted below.  The COMP_ID column
cascades to the DEPARTMENT table, but does not cascade to the EMPLOYEE table.
> DB2 SQL error: SQLCODE: -407, SQLSTATE: 23502, SQLERRMC: TBSPACEID=2, TABLEID=4, COLNO=0
{prepstmnt 1256737512 
> INSERT INTO EMPLOYEE (DEPT_ID, EMP_ID, NAME) 
>     VALUES (?, ?, ?) 
> [params=(long) 1, (long) 1, (String) Frank]} [code=-407, state=23502]SQLCA OUTPUT[Errp=SQLDFMT1,
Errd=[-2146041828, 28, 0, 0, 0, 0]]
> An application is provided to demonstrate the issue.  To setup and unsuccessfully run
demonstration with OpenJPA: 
> 1. Add DB provider JAR(s) to the FunInheritanceJava project's build path.
> 2. Modify FunInheritanceJava/src/META-INF/applicationcontext-jpa.xml to set the correct
dataSource class, user, password, and currentSchema.
> 3. Modify FunInheritanceJava/database/createtables.sql to set current schema to match
value set in step 1.
> 4. Setup database by running SQL in FunInheritanceJava/database/createtables.sql.
> 5. Run testCreate_WithDepartmentAndEmployee Junit test in FunInheritanceJava/test/service/dao/CompanyDaoTest.java.
> 6. Results should indicate an AssertionFailedError caused by the PersistenceException
displayed above.
> To successfully run demonstration with TopLink:
> 1. Change "org.springframework.orm.jpa.vendor.OpenJpaVendorAdapter" to "org.springframework.orm.jpa.vendor.TopLinkJpaVendorAdapter"
in FunInheritanceJava/src/META-INF/applicationcontext-jpa.xml.
> 2. Run testCreate_WithDepartmentAndEmployee Junit test in FunInheritanceJava/test/service/dao/CompanyDaoTest.java.
> 3. Results should indicate a successful Junit execution.

-- 
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