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" <ojb-user@db.apache.org>


To
OJB Users List <ojb-user@db.apache.org>
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]


Reply via email to