You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@openjpa.apache.org by "Matt Anderson (JIRA)" <ji...@apache.org> on 2007/04/06 17:16:33 UTC
[jira] Updated: (OPENJPA-206) Key column does not cascade multiple
joins.
[ https://issues.apache.org/jira/browse/OPENJPA-206?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel ]
Matt Anderson updated OPENJPA-206:
----------------------------------
Attachment: FunInheritanceJavaPI.zip
> 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.