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]