[
https://issues.apache.org/jira/browse/OPENJPA-206?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel#action_12501562
]
Matt Anderson commented on OPENJPA-206:
---------------------------------------
Any progress on finding a 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.