Thanks for the response Armin. What you mentioned may be right, but
either case isn't what I'm wanting.
The scenario that I'm trying to solve is this:
1 database table Employee and Manager
The MANAGER_EMPLOYEE_MAP is a mapping table for an additional
collection
that the Manager class has (aka a list of employee's
s/he's responsible for). This just
points BACK to the employee table.
> You use a discriminator column to identify the real class (used in
> "table per class"), but in your posted database table script it seems
> you expect a "table per subclass" mapping.
Yes I added the ojbConcreteClass column to identify the real class,
because what I want to happen is that when loading the Company class
collection (as defined in the repository configuration) it will use the
objConcreteClass specified class. So the Company class would contain a
collection of Employee and Manager classes.
Armin Waibel <[EMAIL PROTECTED]>
03/06/07 02:29 PM
Please respond to
"OJB Users List" <[email protected]>
To
OJB Users List <[email protected]>
cc
Subject
Re: Inheritance Mapping
I think you mixed up two different inheritance strategies.
table per class
file:///E:/dev/db-ojb-1b/ojb/doc/docu/guides/advanced-technique.html#Mapping+Each+Class+of+a+Hierarchy+to+a+Distinct+Table+%28table+per+class%29
table per subclass
file:///E:/dev/db-ojb-1b/ojb/doc/docu/guides/advanced-technique.html#Mapping+Each+Subclass+to+a+Distinct+Table+%28table+per+subclass%29
You use a discriminator column to identify the real class (used in
"table per class"), but in your posted database table script it seems
you expect a "table per subclass" mapping.
Could this be the issue?
regards,
Armin
>
> The following is an EXAMPLE of what I'm trying to do.
>
> Classes --- Based on documentation examples:
> ==================================
> public class Company {
> private Integer id;
> private Collection<Employee> employees;
> private String name;
>
> public Company() { }
>
> public Integer getId() {
> return id;
> }
> public void setId(Integer id) {
> this.id = id;
> }
> public Collection<Employee> getEmployees() {
> if (employees == null)
> employees = new ArrayList();
>
> return employees;
> }
> public void setEmployees(Collection<Employee> employees) {
> this.employees = employees;
> }
> public String getName() {
> return name;
> }
> public void setName(String name) {
> this.name = name;
> }
> }
>
> public class Employee {
> protected Integer id;
> protected Integer companyId;
> protected String name;
> protected String ojbConcreteClass;
>
> public Employee() { this.ojbConcreteClass =
> this.getClass().getName(); }
>
> public Integer getId() {
> return id;
> }
> public void setId(Integer id) {
> this.id = id;
> }
> public Integer getCompanyId() {
> return companyId;
> }
> public void setCompanyId(Integer companyId) {
> this.companyId = companyId;
> }
> public String getName() {
> return name;
> }
> public void setName(String name) {
> this.name = name;
> }
> public String getOjbConcreteClass() {
> return ojbConcreteClass;
> }
> public void setOjbConcreteClass(String ojbConcreteClass) {
> this.ojbConcreteClass = ojbConcreteClass;
> }
> }
>
> public class Manager extends Employee {
> private Collection<Employee> employees;
>
> public Manager() { super(); }
>
> public Collection<Employee> getEmployees() {
> if (employees == null)
> employees = new ArrayList();
>
> return employees;
> }
> public void setEmployees(Collection<Employee> employees) {
> this.employees = employees;
> }
> }
>
> Database(DB2) tables:
> ================
> CREATE TABLE company (
> company_id INTEGER NOT NULL GENERATED ALWAYS AS IDENTITY (START WITH 1
> INCREMENT BY 1),
> name varchar(255) NOT NULL,
> --
> PRIMARY KEY (company_id)
> );
>
> CREATE TABLE employee (
> employee_id INTEGER NOT NULL GENERATED ALWAYS AS IDENTITY (START WITH
1
> INCREMENT BY 1),
> name varchar(255) NOT NULL,
> company_id_FK INTEGER NOT NULL,
> class_name varchar(255) NOT NULL,
> --
> PRIMARY KEY (employee_id),
> FOREIGN KEY (company_id_FK) REFERENCES company (company_id)
> );
>
> CREATE TABLE manager_employee_map (
> manager_id_FK INTEGER NOT NULL,
> employee_id_FK INTEGER NOT NULL,
> --
> FOREIGN KEY (manager_id_FK) REFERENCES employee (employee_id),
> FOREIGN KEY (employee_id_FK) REFERENCES employee (employee_id)
> );
>
> Repository mapping:
> ===============
> <class-descriptor class="Company" table="COMPANY">
> <field-descriptor name="id" column="COMPANY_ID"
> jdbc-type="INTEGER"
> primarykey="true" autoincrement="true" access="readonly"/>
> <field-descriptor name="name" column="NAME" jdbc-type="VARCHAR"
/>
>
> <collection-descriptor name="employees"
> element-class-ref="Employee"
> auto-delete="true" auto-update="true" auto-insert="true"
> auto-retrieve="true">
> <inverse-foreignkey field-ref="CompanyId"/>
> </collection-descriptor>
> </class-descriptor>
>
> <class-descriptor class="Employee" table="employee">
> <extent-class class-ref="Manager"/>
> <field-descriptor name="id" column="EMPLOYEE_ID"
> jdbc-type="INTEGER"
> primarykey="true" autoincrement="true" access="readonly"/>
> <field-descriptor name="name" column="NAME" jdbc-type="VARCHAR"
/>
> <field-descriptor name="companyId" column="COMPANY_ID_FK"
> jdbc-type="INTEGER"/>
> <field-descriptor name="ojbConcreteClass" column="CLASS_NAME"
> jdbc-type="VARCHAR" />
> </class-descriptor>
>
> <class-descriptor class="Manager" table="employee">
> <field-descriptor name="id" column="EMPLOYEE_ID"
> jdbc-type="INTEGER"
> primarykey="true" autoincrement="true" access="readonly"/>
> <field-descriptor name="name" column="NAME" jdbc-type="VARCHAR"
/>
> <field-descriptor name="companyId" column="COMPANY_ID_FK"
> jdbc-type="INTEGER"/>
> <field-descriptor name="ojbConcreteClass" column="CLASS_NAME"
> jdbc-type="VARCHAR" />
>
> <collection-descriptor name="employees"
> element-class-ref="Employee"
> auto-retrieve="true" auto-update="true" auto-delete="true"
> indirection-table="MANAGER_EMPLOYEE_MAP">
> <fk-pointing-to-this-class column="MANAGER_ID_FK"/>
> <fk-pointing-to-element-class column="EMPLOYEE_ID_FK"/>
> </collection-descriptor>
> </class-descriptor>
>
>
> Adam Brons
---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]