Hi Andy, Erik,
I'm using the latest JPOX build and still get exceptions for mapping 2
for both identity types:
Application identity: org.jpox.metadata.InvalidMetaDataException: Class
"org.apache.jdo.tck.pc.company.Employee" has been specified to use
"subclass-table" inheritance strategy yet has at least one field that is
a Collection/Map. This is not currently supported by JPOX.
Datastore identity: org.jpox.metadata.InvalidMetaDataException:
Datastore-identity strategy in class
"org.apache.jdo.tck.pc.company.DentalInsurance" ("identity") is not the
same as the Datastore-Identity strategy declared in the super class(es)
("native").
Please apply the inheritance patch and copy the attached ORM files to
"tck20/test/orm/<identity type>/org/apache/jdo/tck/pc/company". These
files qualify fields of superclasses, e.g. SuperClass.field. Then try
"maven -o -Djdo.tck.cfglist=inheritance2.conf installSchema
runtck.jdori". Do both identity types pass on your side?
Regards,
Michael
I replaced in the ORM the part that overwrites the definition for
Insurance, Dental and Medical as below and got it to work. I'm using
JPOX head.
And previous to that, I fixed an issue in CVS HEAD where the overriding field
was specified in the ORM file (rather than the JDO file which our unit test
was using). Consequently you should grab the latest JPOX build.
--
-------------------------------------------------------------------
Michael Watzek [EMAIL PROTECTED] Engineering GmbH
mailto:[EMAIL PROTECTED] Buelowstr. 66
Tel.: ++49/30/235 520 36 10783 Berlin - Germany
Fax.: ++49/30/217 520 12 http://www.spree.de/
-------------------------------------------------------------------
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE orm PUBLIC "-//Sun Microsystems, Inc.//DTD Java Data Objects Mapping Metadata 2.0//EN" "http://java.sun.com/dtd/orm_2_0.dtd">
<!--
This file contains the schema information when an implementation
has application identity.
Inheritance mapping:
Separate table for each class in the inheritance hierarchy.
No tables for abstract classes.
Each table contains columns for all fields.
Managers, mentors, hradvisors, and employees of the month
are fulltime employees.
Only fulltime employees can have insurances, can be project members,
and can be project reviewers.
Separate phone number type tables for persons, fulltime employees,
and parttime employees.
Inheritance strategy:
Employee, Insurance: subclass-table.
all other classes: new-table.
-->
<orm>
<package name="org.apache.jdo.tck.pc.company">
<class name="Company" table="companies">
<field name="companyid" column="ID" primary-key="true"/>
<field name="name" column="NAME"/>
<field name="founded" column="FOUNDEDDATE"/>
<field name="address">
<embedded null-indicator-column="COUNTRY">
<field name="addrid" column="ADDRID"/>
<field name="street" column="STREET"/>
<field name="city" column="CITY"/>
<field name="state" column="STATE"/>
<field name="zipcode" column="ZIPCODE"/>
<field name="country" column="COUNTRY"/>
</embedded>
</field>
<field name="departments" mapped-by="company"/>
</class>
<class name="Department" table="departments">
<field name="deptid" column="ID" primary-key="true"/>
<field name="name" column="NAME"/>
<field name="company" column="COMPANYID" foreign-key="true"/>
<field name="employees" mapped-by="department"/>
<field name="fundedEmps" mapped-by="fundingDept"/>
<field name="employeeOfTheMonth" column="EMP_OF_THE_MONTH"/>
</class>
<class name="PartTimeEmployee" table="parttimeemployees">
<inheritance strategy="new-table"/>
<field name="Person.personid" column="PERSONID" primary-key="true"/>
<field name="Person.firstname" column="FIRSTNAME"/>
<field name="Person.lastname" column="LASTNAME"/>
<field name="Person.middlename" column="MIDDLENAME"/>
<field name="Person.address">
<embedded null-indicator-column="COUNTRY">
<field name="addrid" column="ADDRID"/>
<field name="street" column="STREET"/>
<field name="city" column="CITY"/>
<field name="state" column="STATE"/>
<field name="zipcode" column="ZIPCODE"/>
<field name="country" column="COUNTRY"/>
</embedded>
</field>
<field name="Person.phoneNumbers" table="parttime_employee_phoneno_type" >
<join column="EMPID"/>
<key column="TYPE"/>
<value column="PHONENO"/>
</field>
<field name="Employee.hiredate" column="HIREDATE"/>
<field name="Employee.weeklyhours" column="WEEKLYHOURS"/>
<field name="Employee.dentalInsurance" mapped-by="employee"/>
<field name="Employee.medicalInsurance" mapped-by="employee"/>
<field name="Employee.department" column="DEPARTMENT">
<foreign-key/>
</field>
<field name="Employee.fundingDept" column="FUNDINGDEPT">
<foreign-key/>
</field>
<field name="Employee.manager" column="MANAGER">
<foreign-key/>
</field>
<field name="Employee.mentor" column="MENTOR">
<foreign-key/>
</field>
<field name="Employee.protege" mapped-by="mentor"/>
<field name="Employee.hradvisor" column="HRADVISOR">
<foreign-key/>
</field>
<field name="Employee.reviewedProjects" mapped-by="reviewers">
</field>
<field name="Employee.projects" mapped-by="members"/>
<field name="Employee.team" mapped-by="manager"/>
<field name="Employee.hradvisees" mapped-by="hradvisor"/>
<field name="wage" column="WAGE"/>
</class>
<class name="FullTimeEmployee" table="fulltimeemployees">
<inheritance strategy="new-table"/>
<field name="Person.personid" column="PERSONID" primary-key="true"/>
<field name="Person.firstname" column="FIRSTNAME"/>
<field name="Person.lastname" column="LASTNAME"/>
<field name="Person.middlename" column="MIDDLENAME"/>
<field name="Person.address">
<embedded null-indicator-column="COUNTRY">
<field name="addrid" column="ADDRID"/>
<field name="street" column="STREET"/>
<field name="city" column="CITY"/>
<field name="state" column="STATE"/>
<field name="zipcode" column="ZIPCODE"/>
<field name="country" column="COUNTRY"/>
</embedded>
</field>
<field name="Person.phoneNumbers" table="fulltime_employee_phoneno_type" >
<join column="EMPID"/>
<key column="TYPE"/>
<value column="PHONENO"/>
</field>
<field name="Employee.hiredate" column="HIREDATE"/>
<field name="Employee.weeklyhours" column="WEEKLYHOURS"/>
<field name="Employee.dentalInsurance" mapped-by="employee"/>
<field name="Employee.medicalInsurance" mapped-by="employee"/>
<field name="Employee.department" column="DEPARTMENT">
<foreign-key/>
</field>
<field name="Employee.fundingDept" column="FUNDINGDEPT">
<foreign-key/>
</field>
<field name="Employee.manager" column="MANAGER">
<foreign-key/>
</field>
<field name="Employee.mentor" column="MENTOR">
<foreign-key/>
</field>
<field name="Employee.protege" mapped-by="mentor"/>
<field name="Employee.hradvisor" column="HRADVISOR">
<foreign-key/>
</field>
<field name="Employee.reviewedProjects" mapped-by="reviewers">
</field>
<field name="Employee.projects" mapped-by="members"/>
<field name="Employee.team" mapped-by="manager"/>
<field name="Employee.hradvisees" mapped-by="hradvisor"/>
<field name="salary" column="SALARY"/>
</class>
<class name="Employee">
<inheritance strategy="subclass-table"/>
</class>
<class name="Person" table="persons">
<inheritance strategy="new-table"/>
<field name="personid" column="PERSONID" primary-key="true"/>
<field name="firstname" column="FIRSTNAME"/>
<field name="lastname" column="LASTNAME"/>
<field name="middlename" column="MIDDLENAME"/>
<field name="address">
<embedded null-indicator-column="COUNTRY">
<field name="addrid" column="ADDRID"/>
<field name="street" column="STREET"/>
<field name="city" column="CITY"/>
<field name="state" column="STATE"/>
<field name="zipcode" column="ZIPCODE"/>
<field name="country" column="COUNTRY"/>
</embedded>
</field>
<field name="phoneNumbers" table="employee_phoneno_type" >
<join column="EMPID"/>
<key column="TYPE"/>
<value column="PHONENO"/>
</field>
</class>
<class name="Insurance">
<inheritance strategy="subclass-table"/>
</class>
<class name="DentalInsurance" table="dentalinsurance">
<inheritance strategy="new-table"/>
<field name="Insurance.insid" column="INSID" primary-key="true"/>
<field name="Insurance.carrier" column="CARRIER"/>
<field name="Insurance.employee" column="EMPLOYEE">
<foreign-key/>
</field>
<field name="lifetimeOrthoBenefit" column="LIFETIME_ORTHO_BENEFIT"/>
</class>
<class name="MedicalInsurance" table="medicalinsurance">
<inheritance strategy="new-table"/>
<field name="Insurance.insid" column="INSID" primary-key="true"/>
<field name="Insurance.carrier" column="CARRIER"/>
<field name="Insurance.employee" column="EMPLOYEE">
<foreign-key/>
</field>
<field name="planType" column="PLANTYPE"/>
</class>
<class name="Project" table="projects">
<field name="projid" column="PROJID" primary-key="true"/>
<field name="name" column="NAME"/>
<field name="budget">
<column name="BUDGET" jdbc-type="DECIMAL" length="11" scale="2"/>
</field>
<field name="reviewers" table="project_reviewer">
<join column="PROJID">
<foreign-key name="PR_PROJ_FK"/>
</join>
<element column="REVIEWER">
<foreign-key name="PR_REV_FK"/>
</element>
</field>
<field name="members" table="project_member">
<join column="PROJID"/>
<element column="MEMBER"/>
</field>
</class>
</package>
</orm>
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE orm PUBLIC "-//Sun Microsystems, Inc.//DTD Java Data Objects Mapping Metadata 2.0//EN" "http://java.sun.com/dtd/orm_2_0.dtd">
<!--
This file contains the schema information when an implementation
has datastore identity.
Inheritance mapping:
Separate table for each class in the inheritance hierarchy.
No tables for abstract classes.
Each table contains columns for all fields.
Managers, mentors, hradvisors, and employees of the month
are fulltime employees.
Only fulltime employees can have insurances, can be project members,
and can be project reviewers.
Separate phone number type tables for persons, fulltime employees,
and parttime employees.
Inheritance strategy:
Employee, Insurance: subclass-table.
all other classes: new-table.
-->
<orm>
<package name="org.apache.jdo.tck.pc.company">
<class name="Company" table="companies">
<datastore-identity strategy="identity" column="DATASTORE_IDENTITY"/>
<field name="companyid" column="ID"/>
<field name="name" column="NAME"/>
<field name="founded" column="FOUNDEDDATE"/>
<field name="address">
<embedded null-indicator-column="COUNTRY">
<field name="addrid" column="ADDRID"/>
<field name="street" column="STREET"/>
<field name="city" column="CITY"/>
<field name="state" column="STATE"/>
<field name="zipcode" column="ZIPCODE"/>
<field name="country" column="COUNTRY"/>
</embedded>
</field>
<field name="departments" mapped-by="company"/>
</class>
<class name="Department" table="departments">
<datastore-identity strategy="identity" column="DATASTORE_IDENTITY"/>
<field name="deptid" column="ID"/>
<field name="name" column="NAME"/>
<field name="company" column="COMPANYID" foreign-key="true"/>
<field name="employees" mapped-by="department"/>
<field name="fundedEmps" mapped-by="fundingDept"/>
<field name="employeeOfTheMonth" column="EMP_OF_THE_MONTH"/>
</class>
<class name="PartTimeEmployee" table="parttimeemployees">
<datastore-identity strategy="identity" column="DATASTORE_IDENTITY"/>
<inheritance strategy="new-table"/>
<field name="Person.personid" column="PERSONID"/>
<field name="Person.firstname" column="FIRSTNAME"/>
<field name="Person.lastname" column="LASTNAME"/>
<field name="Person.middlename" column="MIDDLENAME"/>
<field name="Person.address">
<embedded null-indicator-column="COUNTRY">
<field name="addrid" column="ADDRID"/>
<field name="street" column="STREET"/>
<field name="city" column="CITY"/>
<field name="state" column="STATE"/>
<field name="zipcode" column="ZIPCODE"/>
<field name="country" column="COUNTRY"/>
</embedded>
</field>
<field name="Person.phoneNumbers" table="parttime_employee_phoneno_type" >
<join column="EMPID"/>
<key column="TYPE"/>
<value column="PHONENO"/>
</field>
<field name="Employee.hiredate" column="HIREDATE"/>
<field name="Employee.weeklyhours" column="WEEKLYHOURS"/>
<field name="Employee.dentalInsurance" mapped-by="employee"/>
<field name="Employee.medicalInsurance" mapped-by="employee"/>
<field name="Employee.department" column="DEPARTMENT">
<foreign-key/>
</field>
<field name="Employee.fundingDept" column="FUNDINGDEPT">
<foreign-key/>
</field>
<field name="Employee.manager" column="MANAGER">
<foreign-key/>
</field>
<field name="Employee.mentor" column="MENTOR">
<foreign-key/>
</field>
<field name="Employee.protege" mapped-by="mentor"/>
<field name="Employee.hradvisor" column="HRADVISOR">
<foreign-key/>
</field>
<field name="Employee.reviewedProjects" mapped-by="reviewers">
<element>
<foreign-key name="PR_PROJ_FK"/>
</element>
</field>
<field name="Employee.projects" mapped-by="members"/>
<field name="Employee.team" mapped-by="manager"/>
<field name="Employee.hradvisees" mapped-by="hradvisor"/>
<field name="wage" column="WAGE"/>
</class>
<class name="FullTimeEmployee" table="fulltimeemployees">
<datastore-identity strategy="identity" column="DATASTORE_IDENTITY"/>
<inheritance strategy="new-table"/>
<field name="Person.personid" column="PERSONID"/>
<field name="Person.firstname" column="FIRSTNAME"/>
<field name="Person.lastname" column="LASTNAME"/>
<field name="Person.middlename" column="MIDDLENAME"/>
<field name="Person.address">
<embedded null-indicator-column="COUNTRY">
<field name="addrid" column="ADDRID"/>
<field name="street" column="STREET"/>
<field name="city" column="CITY"/>
<field name="state" column="STATE"/>
<field name="zipcode" column="ZIPCODE"/>
<field name="country" column="COUNTRY"/>
</embedded>
</field>
<field name="Person.phoneNumbers" table="fulltime_employee_phoneno_type" >
<join column="EMPID"/>
<key column="TYPE"/>
<value column="PHONENO"/>
</field>
<field name="Employee.hiredate" column="HIREDATE"/>
<field name="Employee.weeklyhours" column="WEEKLYHOURS"/>
<field name="Employee.dentalInsurance" mapped-by="employee"/>
<field name="Employee.medicalInsurance" mapped-by="employee"/>
<field name="Employee.department" column="DEPARTMENT">
<foreign-key/>
</field>
<field name="Employee.fundingDept" column="FUNDINGDEPT">
<foreign-key/>
</field>
<field name="Employee.manager" column="MANAGER">
<foreign-key/>
</field>
<field name="Employee.mentor" column="MENTOR">
<foreign-key/>
</field>
<field name="Employee.protege" mapped-by="mentor"/>
<field name="Employee.hradvisor" column="HRADVISOR">
<foreign-key/>
</field>
<field name="Employee.reviewedProjects" mapped-by="reviewers">
<element>
<foreign-key name="PR_PROJ_FK"/>
</element>
</field>
<field name="Employee.projects" mapped-by="members"/>
<field name="Employee.team" mapped-by="manager"/>
<field name="Employee.hradvisees" mapped-by="hradvisor"/>
<field name="salary" column="SALARY"/>
</class>
<class name="Employee">
<inheritance strategy="subclass-table"/>
</class>
<class name="Person" table="persons">
<datastore-identity strategy="identity" column="DATASTORE_IDENTITY"/>
<inheritance strategy="new-table"/>
<field name="personid" column="PERSONID"/>
<field name="firstname" column="FIRSTNAME"/>
<field name="lastname" column="LASTNAME"/>
<field name="middlename" column="MIDDLENAME"/>
<field name="address">
<embedded null-indicator-column="COUNTRY">
<field name="addrid" column="ADDRID"/>
<field name="street" column="STREET"/>
<field name="city" column="CITY"/>
<field name="state" column="STATE"/>
<field name="zipcode" column="ZIPCODE"/>
<field name="country" column="COUNTRY"/>
</embedded>
</field>
<field name="phoneNumbers" table="employee_phoneno_type" >
<join column="EMPID"/>
<key column="TYPE"/>
<value column="PHONENO"/>
</field>
</class>
<class name="Insurance">
<inheritance strategy="subclass-table"/>
</class>
<class name="DentalInsurance" table="dentalinsurance">
<datastore-identity strategy="identity" column="DATASTORE_IDENTITY"/>
<inheritance strategy="new-table"/>
<field name="Insurance.insid" column="INSID"/>
<field name="Insurance.carrier" column="CARRIER"/>
<field name="Insurance.employee" column="EMPLOYEE">
<foreign-key/>
</field>
<field name="lifetimeOrthoBenefit" column="LIFETIME_ORTHO_BENEFIT"/>
</class>
<class name="MedicalInsurance" table="medicalinsurance">
<datastore-identity strategy="identity" column="DATASTORE_IDENTITY"/>
<inheritance strategy="new-table"/>
<field name="Insurance.insid" column="INSID"/>
<field name="Insurance.carrier" column="CARRIER"/>
<field name="Insurance.employee" column="EMPLOYEE">
<foreign-key/>
</field>
<field name="planType" column="PLANTYPE"/>
</class>
<class name="Project" table="projects">
<datastore-identity strategy="identity" column="DATASTORE_IDENTITY"/>
<field name="projid" column="PROJID"/>
<field name="name" column="NAME"/>
<field name="budget">
<column name="BUDGET" jdbc-type="DECIMAL" length="11" scale="2"/>
</field>
<field name="reviewers" table="project_reviewer">
<join column="PROJID"/>
<element column="REVIEWER">
<foreign-key name="PR_REV_FK"/>
</element>
</field>
<field name="members" table="project_member">
<join column="PROJID"/>
<element column="MEMBER"/>
</field>
</class>
</package>
</orm>