Hi,

I think I'm in a double windmill and I ask you for expert opinion:

I have one class Employee. This one has a collection of roles. I implemented
a class AbstractRole and I derived three classes Admininstrator, TeamMember
and ProjectEngineer from it. First I thougt it would reach to have one
primary key employeeID for all of my three subclasses. But when I used OJB
and one
table per class I got the right number of role objects, but all objects were
from the same concrete class. So I inserted a roleID in each one of my
tables, unique over all tables. Now I got the right number and the right
objects.
But now I have another problem: The class ProjectEngineer for example has a
collection of Project objects. I designed my classes to have a relation
projectObject.projectEngineerID = projectEngineerObject.employeedID. But I
think
this isn't possible with OJB, because of the previous change my primary key
for
role objects is now roleID. The primary key for project objects is
projectID.
Have I oversighted anything or do I really have to change it into a relation
role.roleID = projectObject.projectEngineerID = projectEngineerObject.roleID
?

Here's my repository.xml for better understanding:

    <class-descriptor class="com.basfits.projectmanager.model.Employee"
table="EMPLOYEE">
        <field-descriptor name="id" column="ID" jdbc-type="INTEGER"
primarykey="true" autoincrement="true"/>
        <field-descriptor name="lastName" column="LAST_NAME"
jdbc-type="VARCHAR"/>
        <field-descriptor name="firstName" column="FIRST_NAME"
jdbc-type="VARCHAR"/>
        <collection-descriptor name="roles"
element-class-ref="com.basfits.projectmanager.model.AbstractRole">
            <inverse-foreignkey field-ref="employeeID"/>
        </collection-descriptor>
    </class-descriptor>
    <class-descriptor class="com.basfits.projectmanager.model.Project"
table="PROJECT">
        <field-descriptor name="id" column="ID" jdbc-type="INTEGER"
primarykey="true" autoincrement="true"/>
        <field-descriptor name="title" column="TITLE" jdbc-type="VARCHAR"/>
        <field-descriptor name="description" column="DESCRIPTION"
jdbc-type="VARCHAR"/>
        <field-descriptor name="budget" column="BUDGET" jdbc-type="FLOAT"/>
        <field-descriptor name="deadline" column="DEADLINE"
jdbc-type="DATE"/>
        <field-descriptor name="completionDate" column="COMPLETION_DATE"
jdbc-type="DATE"/>
        <field-descriptor name="projectEngineerID" column="PROJECT_ENGINEER"
jdbc-type="INTEGER"/>
        <reference-descriptor name="projectEngineer"
class-ref="com.basfits.projectmanager.model.ProjectEngineer">
            <foreignkey field-ref="projectEngineerID"/>
        </reference-descriptor>
        <collection-descriptor name="subProjects"
element-class-ref="com.basfits.projectmanager.model.SubProject"
auto-delete="true" auto-update="true"
auto-retrieve="true">
            <fk-pointing-to-element-class column="project"/>
        </collection-descriptor>
    </class-descriptor>
    <class-descriptor class="com.basfits.projectmanager.model.SubProject"
table="SUBPROJECT">
        <field-descriptor name="id" column="ID" jdbc-type="INTEGER"
primarykey="true" autoincrement="true"/>
        <field-descriptor name="title" column="TITLE" jdbc-type="VARCHAR"/>
        <field-descriptor name="description" column="DESCRIPTION"
jdbc-type="VARCHAR"/>
        <field-descriptor name="budget" column="BUDGET" jdbc-type="FLOAT"/>
        <field-descriptor name="deadline" column="DEADLINE"
jdbc-type="DATE"/>
        <field-descriptor name="completionDate" column="COMPLETION_DATE"
jdbc-type="DATE"/>
        <field-descriptor name="projectID" column="PROJECT"
jdbc-type="INTEGER"/>
        <field-descriptor name="responsiblePersonID"
column="RESPONSIBLE_PERSON"
jdbc-type="INTEGER"/>
        <reference-descriptor name="project"
class-ref="com.basfits.projectmanager.model.Project">
            <foreignkey field-ref="projectID"/>
        </reference-descriptor>
        <reference-descriptor name="responsiblePerson"
class-ref="com.basfits.projectmanager.model.TeamMember">
            <foreignkey field-ref="responsiblePersonID"/>
        </reference-descriptor>
        <collection-descriptor name="tasks"
element-class-ref="com.basfits.projectmanager.model.Task" auto-delete="true"
auto-update="true"
auto-retrieve="true">
            <fk-pointing-to-element-class column="SUBPROJECT"/>
        </collection-descriptor>
    </class-descriptor>
    <class-descriptor class="com.basfits.projectmanager.model.Task"
table="TASK">
        <field-descriptor name="id" column="ID" jdbc-type="INTEGER"
primarykey="true" autoincrement="true"/>
        <field-descriptor name="title" column="TITLE" jdbc-type="VARCHAR"/>
        <field-descriptor name="description" column="DESCRIPTION"
jdbc-type="VARCHAR"/>
        <field-descriptor name="budget" column="BUDGET" jdbc-type="FLOAT"/>
        <field-descriptor name="deadline" column="DEADLINE"
jdbc-type="DATE"/>
        <field-descriptor name="completionDate" column="COMPLETION_DATE"
jdbc-type="DATE"/>
        <field-descriptor name="subProjectID" column="SUBPROJECT"
jdbc-type="INTEGER"/>
        <field-descriptor name="state" column="STATE" jdbc-type="SMALLINT"/>
        <reference-descriptor name="subProject"
class-ref="com.basfits.projectmanager.model.SubProject">
            <foreignkey field-ref="subProjectID"/>
        </reference-descriptor>
        <collection-descriptor name="workers"
element-class-ref="com.basfits.projectmanager.model.TeamMember"
indirection-table="WORKER_TASK"
auto-delete="true" auto-update="true" auto-retrieve="true">
            <fk-pointing-to-this-class column="TASK"/>
            <fk-pointing-to-element-class column="WORKER"/>
        </collection-descriptor>
    </class-descriptor>
    <class-descriptor class="com.basfits.projectmanager.model.Work"
table="WORK">
        <field-descriptor name="id" column="ID" jdbc-type="INTEGER"
primarykey="true" autoincrement="true"/>
        <field-descriptor name="hours" column="HOURS" jdbc-type="FLOAT"/>
        <field-descriptor name="date" column="DATE" jdbc-type="DATE"/>
        <field-descriptor name="taskID" column="TASK" jdbc-type="INTEGER"/>
        <field-descriptor name="workerID" column="WORKER"
jdbc-type="INTEGER"/>
        <reference-descriptor name="subProject"
class-ref="com.basfits.projectmanager.model.Task">
            <foreignkey field-ref="taskID"/>
        </reference-descriptor>
        <reference-descriptor name="subProject"
class-ref="com.basfits.projectmanager.model.TeamMember">
            <foreignkey field-ref="workerID"/>
        </reference-descriptor>
    </class-descriptor>
    <class-descriptor class="com.basfits.projectmanager.model.AbstractRole">
        <extent-class
class-ref="com.basfits.projectmanager.model.Administrator"/>
        <extent-class
class-ref="com.basfits.projectmanager.model.TeamMember"/>
        <extent-class
class-ref="com.basfits.projectmanager.model.ProjectEngineer"/>
    </class-descriptor>
    <class-descriptor class="com.basfits.projectmanager.model.Administrator"
table="ADMINISTRATOR">
        <field-descriptor name="roleID" column="ROLEID" jdbc-type="INTEGER"
primarykey="true" autoincrement="true" sequence-name="roleSequence"/>
        <field-descriptor name="employeeID" column="EMPLOYEE"
jdbc-type="INTEGER"
indexed="true"/>
        <reference-descriptor name="employee"
class-ref="com.basfits.projectmanager.model.Employee" refresh="true">
            <foreignkey field-ref="employeeID"/>
        </reference-descriptor>
    </class-descriptor>
    <class-descriptor class="com.basfits.projectmanager.model.TeamMember"
table="TEAM_MEMBER">
        <field-descriptor name="roleID" column="ROLEID" jdbc-type="INTEGER"
primarykey="true" autoincrement="true" sequence-name="roleSequence"/>
        <field-descriptor name="employeeID" column="EMPLOYEE"
jdbc-type="INTEGER"
indexed="true"/>
        <reference-descriptor name="employee"
class-ref="com.basfits.projectmanager.model.Employee" refresh="true">
            <foreignkey field-ref="employeeID"/>
        </reference-descriptor>
        <collection-descriptor name="subProjects"
element-class-ref="com.basfits.projectmanager.model.SubProject"
auto-delete="true" auto-update="true"
auto-retrieve="true">
            <inverse-foreignkey field-ref="responsiblePersonID"/>
        </collection-descriptor>
        <collection-descriptor name="work"
element-class-ref="com.basfits.projectmanager.model.Work" auto-delete="true"
auto-update="true"
auto-retrieve="true">
            <inverse-foreignkey field-ref="workerID"/>
        </collection-descriptor>
        <collection-descriptor name="tasks"
element-class-ref="com.basfits.projectmanager.model.Task"
indirection-table="WORKER_TASK" auto-delete="true"
auto-update="true" auto-retrieve="true">
            <fk-pointing-to-this-class column="WORKER"/>
            <fk-pointing-to-element-class column="TASK"/>
        </collection-descriptor>
    </class-descriptor>
    <class-descriptor
class="com.basfits.projectmanager.model.ProjectEngineer"
table="PROJECT_ENGINEER">
        <field-descriptor name="roleID" column="ROLEID" jdbc-type="INTEGER"
primarykey="true" autoincrement="true" sequence-name="roleSequence"/>
        <field-descriptor name="employeeID" column="EMPLOYEE"
jdbc-type="INTEGER"
indexed="true"/>
        <reference-descriptor name="employee"
class-ref="com.basfits.projectmanager.model.Employee" refresh="true">
            <foreignkey field-ref="employeeID"/>
        </reference-descriptor>
        <collection-descriptor name="projects"
element-class-ref="com.basfits.projectmanager.model.Project"
auto-delete="true" auto-update="true"
auto-retrieve="true">
            <inverse-foreignkey field-ref="projectEngineerID"/>
        </collection-descriptor>
    </class-descriptor>

Best regards

Kim Wegerle

-- 
NEU F�R ALLE - GMX MediaCenter - f�r Fotos, Musik, Dateien...
Fotoalbum, File Sharing, MMS, Multimedia-Gru�, GMX FotoService

Jetzt kostenlos anmelden unter http://www.gmx.net

+++ GMX - die erste Adresse f�r Mail, Message, More! +++


---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]

Reply via email to