CMP many-to-many relationship with 3 beans
archevis Jul 28, 2003 8:08 AMLet's say we have two ordinary entities, Employee and Company, related to each other through a third entity called Employment. The DB tables could be stripped down to the following:
Employee:
- emp_id
Company:
- com_id
Employment:
- emp_id
- com_id
- start_date
Foreign keys should be obvious... My point here is that the associative bean Employment itself contains data of interest, and so relationship table mapping will not do. The goal is to be able to traverse from a Company through Employments to Employees, and vice versa, using container managed relationships.
I reckon for the Employment bean we would need a custom primary key class EmploymentPK, containing reference to the CompanyLocal and EmployeeLocal of interest.
Assuming I have a ejb-jar.xml containing...
<ejb-relation>
<ejb-relation-name>company-employments</ejb-relation-name>
<ejb-relationship-role>
<ejb-relationship-role-name>company</ejb-relationship-role-name>
One
<relationship-role-source>
<ejb-name>Company</ejb-name>
</relationship-role-source>
<cmr-field>
<cmr-field-name>employments</cmr-field-name>
</cmr-field>
</ejb-relationship-role>
<ejb-relationship-role>
<ejb-relationship-role-name>employments</ejb-relationship-role-name>
Many
<relationship-role-source>
<ejb-name>Employment</ejb-name>
</relationship-role-source>
<cmr-field>
<cmr-field-name>company</cmr-field-name>
</cmr-field>
</ejb-relationship-role>
</ejb-relation>
<ejb-relation>
<ejb-relation-name>employee-employments</ejb-relation-name>
<ejb-relationship-role>
<ejb-relationship-role-name>employee</ejb-relationship-role-name>
One
<relationship-role-source>
<ejb-name>Employee</ejb-name>
</relationship-role-source>
<cmr-field>
<cmr-field-name>employments</cmr-field-name>
</cmr-field>
</ejb-relationship-role>
<ejb-relationship-role>
<ejb-relationship-role-name>employments</ejb-relationship-role-name>
Many
<relationship-role-source>
<ejb-name>Employment</ejb-name>
</relationship-role-source>
<cmr-field>
<cmr-field-name>employee</cmr-field-name>
</cmr-field>
</ejb-relationship-role>
</ejb-relation>
... what should the jbosscmp-jdbc.xml contain?
Here is my suggestion so far:
<ejb-relation>
<ejb-relation-name>company-employments</ejb-relation-name>
<foreign-key-mapping />
<ejb-relationship-role>
<ejb-relationship-role-name>company</ejb-relationship-role-name>
<key-fields>
<key-field>
<field-name>companyID</field-name>
<column-name>com_id</column-name>
</key-field>
</key-fields>
</ejb-relationship-role>
<ejb-relationship-role>
<ejb-relationship-role-name>employments</ejb-relationship-role-name>
<key-fields />
</ejb-relationship-role>
</ejb-relation>
<ejb-relation>
<ejb-relation-name>employee-employments</ejb-relation-name>
<foreign-key-mapping />
<ejb-relationship-role>
<ejb-relationship-role-name>employee</ejb-relationship-role-name>
<key-fields>
<key-field>
<field-name>employeeID</field-name>
<column-name>emp_id</column-name>
</key-field>
</key-fields>
</ejb-relationship-role>
<ejb-relationship-role>
<ejb-relationship-role-name>employments</ejb-relationship-role-name>
<key-fields />
</ejb-relationship-role>
</ejb-relation>
Anyone care to comment on this?