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

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

Unfortunately I did mean to use two transactions and I haven't been able to 
find a workaround that doesn't. I'll keep looking for the real fix. 

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

Reply via email to