30.5.3.3. 関係テーブルのマッピング
関係テーブルマッピングは、1 対 1、および 1 対多のリレーションシップでは一般的ではありませんが、多対多のリレーションシップに対応する唯一のマッピングスタイルです。関係テーブルは
relation-table-mapping
要素を使用して定義します。コンテンツモデルを以下に示します。
図30.10 jbosscmp-jdbc relation-table-mapping 要素のコンテンツモデル
Gangster-Job
リレーションシップの relation-table-mapping が以下に示していますが、テーブルマッピング要素を太字で強調表示しています。
例30.1 jbosscmp-jdbc.xml Relation-table マッピング
<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>
relation-table-mapping
要素は entity
要素で使用可能なオプションのサブセットを含みます。この要素に関する詳細な説明をここで繰り返します。
- table-name: この任意の要素は、このリレーションシップのデータを格納するテーブル名を付与します。デフォルトのテーブル名は、エンティティと
cmr-field
名に基づいて付与されます。 - datasource: この任意の要素は、データソースのルックアップに使用される
jndi-name
になります。データベース接続はすべてデータソースから取得されます。エンティティにさまざまなデータソースを持たせると、finder およびejbSelect
でクエリできるドメインを大幅に制約することになるため推奨しません。 - datasourcemapping: この任意の要素では、使用する
type-mapping
の名称を指定することができます。 - create-table: この任意の要素が true の場合、JBoss はエンティティのテーブルの作成を試行しなければなりません。アプリケーションをデプロイすると、JBoss はテーブル作成の前にすでにテーブルが存在していないか確認します。テーブルが見つかった場合、ログに記録されるだけでテーブルは作成されませんこのオプションは、開発の初期段階でテーブル構造が頻繁に変わる場合に非常に役立ちます。
- post-table-create: この任意要素はデータベーステーブルの作成直後に実行されるべき任意の SQL ステートメントを指定します。このコマンドは
create-table
が true でテーブルが以前に存在しない場合にのみ実行されます。 - remove-table: この任意の要素が true の場合、アプリケーションがアンデプロイされると、
relation-table
のドロップを試行します。このオプションは、開発の初期段階でテーブル構造が頻繁に変わる場合に非常に役立ちます。 - row-locking:この任意の要素が true の場合、トランザクションでロードされたすべての行を JBoss がロックすることを意味します。ほとんどのデータベースがエンティティのロード時に
SELECT FOR UPDATE
構文を使用してこれを実装しますが、実際の構文は、このエンティティで使用されるdatasource-mapping
内のrow-locking-template
で決まります。 - pk-constraint: この任意の要素は、true であれば、テーブル作成時に JBoss がプライマリキー制約を追加することを意味します。