30.5.3.3. 関係テーブルのマッピング

関係テーブルマッピングは、1 対 1、および 1 対多のリレーションシップでは一般的ではありませんが、多対多のリレーションシップに対応する唯一のマッピングスタイルです。関係テーブルは relation-table-mapping 要素を使用して定義します。コンテンツモデルを以下に示します。
jbosscmp-jdbc 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 がプライマリキー制約を追加することを意味します。