JBoss.org Community Documentation
Relation table mapping is less common for one-to-one and one-to-many relationships, but is the only mapping style allowed for many-to-many relationships. Relation table mapping is defined using the relation-table-mapping
element, the content model of which is shown below.
The relation-table-mapping for the Gangster-Job
relationship is shown in with table mapping elements highlighted in bold:
<jbosscmp-jdbc> <relationships> <ejb-relation> <ejb-relation-name>Gangster-Jobs</ejb-relation-name> <relation-table-mapping> <table-name>gangster_job</table-name> </relation-table-mapping> <ejb-relationship-role> <ejb-relationship-role-name>gangster-has-jobs</ejb-relationship-role-name> <key-fields> <key-field> <field-name>gangsterId</field-name> <column-name>gangster</column-name> </key-field> </key-fields> </ejb-relationship-role> <ejb-relationship-role> <ejb-relationship-role-name>job-has-gangsters</ejb-relationship-role-name> <key-fields> <key-field> <field-name>name</field-name> <column-name>job</column-name> </key-field> </key-fields> </ejb-relationship-role> </ejb-relation> </relationships> </jbosscmp-jdbc>
Example 12.1. The jbosscmp-jdbc.xml Relation-table Mapping
The relation-table-mapping
element contains a subset of the options available in the entity
element. A detailed description of these elements is reproduced here for convenience:
table-name
: This optional element gives the name of the table that will hold data for this relationship. The default table name is based on the entity and cmr-field
names.
datasource
: This optional element gives the jndi-name
used to look up the datasource. All database connections are obtained from the datasource. Having different datasources for entities is not recommended, as it vastly constrains the domain over which finders and ejbSelect
s can query.
datasourcemapping
: This optional element allows one to specify the name of the type-mapping
to use.
create-table : This optional element if true indicates JBoss should attempt to create a table for the relationship. When the application is deployed, JBoss checks if a table already exists before creating the table. If a table is found, it is logged, and the table is not created. This option is very useful during the early stages of development when the table structure changes often.
post-table-create
: This optional element specifies an arbitrary SQL statement that should be executed immediately after the database table is created. This command is only executed if create-table
is true and the table did not previously exist.
remove-table
: This optional element if true indicates JBoss should attempt to drop the relation-table
when the application is undeployed. This option is very useful during the early stages of development when the table structure changes often.
row-locking
: This optional element if true indicates JBoss should lock all rows loaded in a transaction. Most databases implement this by using the SELECT FOR UPDATE
syntax when loading the entity, but the actual syntax is determined by the row-locking-template
in the datasource-mapping
used by this entity.
pk-constraint : This optional element if true indicates JBoss should add a primary key constraint when creating tables.