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:13:32 UTC

[jira] Created: (OPENJPA-206) Key column does not cascade multiple joins.

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


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.


[jira] Commented: (OPENJPA-206) Key column does not cascade multiple joins.

Posted by "Michael Dick (JIRA)" <ji...@apache.org>.
    [ 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.


[jira] Updated: (OPENJPA-206) Key column does not cascade multiple joins.

Posted by "Matt Anderson (JIRA)" <ji...@apache.org>.
     [ 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.


[jira] Commented: (OPENJPA-206) Key column does not cascade multiple joins.

Posted by "Matt Anderson (JIRA)" <ji...@apache.org>.
    [ https://issues.apache.org/jira/browse/OPENJPA-206?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel#action_12496554 ] 

Matt Anderson commented on OPENJPA-206:
---------------------------------------

Just to clarify, by "later", do you mean in another transaction?  Can you provide the sample code with the workaround implemented?

Assuming this is being done in two transactions, this would cause unit of work issues for us.

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


[jira] Commented: (OPENJPA-206) Key column does not cascade multiple joins.

Posted by "Michael Dick (JIRA)" <ji...@apache.org>.
    [ 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.