[ http://issues.apache.org/jira/browse/JDO-130?page=all ]
Michael Bouschen closed JDO-130:
--------------------------------
Fix Version: JDO 2 beta
Resolution: Fixed
> Wrong instance returned for Employee-Insurance relationships
> ------------------------------------------------------------
>
> Key: JDO-130
> URL: http://issues.apache.org/jira/browse/JDO-130
> Project: JDO
> Type: Bug
> Components: tck20
> Environment: JPOX
> Reporter: Craig Russell
> Assignee: Erik Bengtson
> Fix For: JDO 2 beta
>
> In the Employee-Insurance relationships, the same table is used for both
> relationships. The thing that distinguishes the relationships is the type of
> the instance. Employee has 0..1 instance of MedicalInsurance and 0..1
> instance of DentalInsurance. Since these are both mapped to the same table,
> the query to retrieve the instance needs to qualify the SQL with the correct
> discriminator depending on the relationship being navigated.
> The incorrect behavior results in a ClassCastException when run with
> application identity:
> test(org.apache.jdo.tck.mapping.CompletenessTest)java.lang.ClassCastException:
> org.apache.jdo.tck.pc.company.DentalInsurance
> at
> org.apache.jdo.tck.pc.company.Employee.jdoReplaceField(Employee.java)
> at
> org.apache.jdo.tck.pc.company.FullTimeEmployee.jdoReplaceField(FullTimeEmployee.java)
> at org.apache.jdo.tck.pc.company.Person.jdoReplaceFields(Person.java)
> at
> org.jpox.state.StateManagerImpl.replaceFields(StateManagerImpl.java:2756)
> at
> org.jpox.store.rdbms.request.FetchRequest.execute(FetchRequest.java:163)
> at org.jpox.store.rdbms.table.ClassTable.fetch(ClassTable.java:1810)
> at org.jpox.store.StoreManager.fetch(StoreManager.java:742)
> at
> org.jpox.state.StateManagerImpl.loadNonDFGFields(StateManagerImpl.java:1612)
> at
> org.jpox.state.StateManagerImpl.isLoaded(StateManagerImpl.java:1730)
> at
> org.apache.jdo.tck.pc.company.Employee.jdoGetmedicalInsurance(Employee.java)
> at
> org.apache.jdo.tck.pc.company.Employee.getMedicalInsurance(Employee.java:210)
> at
> org.apache.jdo.tck.pc.company.Employee.deepCompareFields(Employee.java:447)
> at
> org.apache.jdo.tck.pc.company.FullTimeEmployee.deepCompareFields(FullTimeEmployee.java:120)
> at
> org.apache.jdo.tck.util.EqualityHelper.deepEquals(EqualityHelper.java:559)
> at
> org.apache.jdo.tck.pc.company.Insurance.deepCompareFields(Insurance.java:144)
> at
> org.apache.jdo.tck.pc.company.DentalInsurance.deepCompareFields(DentalInsurance.java:112)
> at
> org.apache.jdo.tck.util.EqualityHelper.deepEquals(EqualityHelper.java:559)
> at
> org.apache.jdo.tck.pc.company.Employee.deepCompareFields(Employee.java:447)
> at
> org.apache.jdo.tck.pc.company.FullTimeEmployee.deepCompareFields(FullTimeEmployee.java:120)
> at
> org.apache.jdo.tck.mapping.CompletenessTest.test(CompletenessTest.java:98)
> at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
> at
> sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
> at
> sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
> at org.apache.jdo.tck.JDO_Test.runBare(JDO_Test.java:197)
> at
> org.apache.jdo.tck.util.BatchTestRunner.start(BatchTestRunner.java:115)
> at
> org.apache.jdo.tck.util.BatchTestRunner.main(BatchTestRunner.java:93)
> It results in incorrect output when run with datastore identity:
> test(org.apache.jdo.tck.mapping.CompletenessTest)junit.framework.AssertionFailedError:
> CompletenessTest failed; see list of failed instances below:
> Expected this instance:
> FullTimeEmployee(1, emp1Last, emp1First, born 9/Jun/1970, phone {}, hired
> 31/Dec/1998, weeklyhours 40.0, $20000.0)
> Got persistent instance:
> FullTimeEmployee(1, emp1Last, emp1First, born 9/Jun/1970, phone {}, hired
> 31/Dec/1998, weeklyhours 40.0, $20000.0)
> Detailed list of differences follows...
> Context: Employee<1>.dentalInsurance-> Insurance<11>.employee->
> Employee<1>.medicalInsurance-> Insurance<1>.insid
> expected '1'
> actual '11'
> Context: Employee<1>.dentalInsurance-> Insurance<11>.employee->
> Employee<1>.medicalInsurance-> Insurance<1>.carrier
> expected 'MedicalCarrier1'
> actual 'DentalCarrier1'
> Context: Employee<1>.dentalInsurance-> Insurance<11>.employee->
> Employee<1>.medicalInsurance-> MedicalInsurance<1>.planType
> Expected not null, actual null
> expected 'PPO'
> actual 'null'
> Expected this instance:
> MedicalInsurance(1, carrier MedicalCarrier1, planType PPO)
> Got persistent instance:
> MedicalInsurance(1, carrier MedicalCarrier1, planType PPO)
> Detailed list of differences follows...
> Context: Insurance<1>.employee-> Employee<1>.medicalInsurance->
> Insurance<1>.insid
> expected '1'
> actual '11'
> Context: Insurance<1>.employee-> Employee<1>.medicalInsurance->
> Insurance<1>.carrier
> expected 'MedicalCarrier1'
> actual 'DentalCarrier1'
> Context: Insurance<1>.employee-> Employee<1>.medicalInsurance->
> MedicalInsurance<1>.planType
> Expected not null, actual null
> expected 'PPO'
> actual 'null'
> Expected this instance:
> DentalInsurance(11, carrier DentalCarrier1, lifetimeOrthoBenefit 99.999)
> Got persistent instance:
> DentalInsurance(11, carrier DentalCarrier1, lifetimeOrthoBenefit 99.999)
> Detailed list of differences follows...
> Context: Insurance<11>.employee-> Employee<1>.medicalInsurance->
> Insurance<1>.insid
> expected '1'
> actual '11'
> Context: Insurance<11>.employee-> Employee<1>.medicalInsurance->
> Insurance<1>.carrier
> expected 'MedicalCarrier1'
> actual 'DentalCarrier1'
> Context: Insurance<11>.employee-> Employee<1>.medicalInsurance->
> MedicalInsurance<1>.planType
> Expected not null, actual null
> expected 'PPO'
> actual 'null'
--
This message is automatically generated by JIRA.
-
If you think it was sent incorrectly contact one of the administrators:
http://issues.apache.org/jira/secure/Administrators.jspa
-
For more information on JIRA, see:
http://www.atlassian.com/software/jira