Show Table of Contents
30.5.2. リレーションシップの宣言
ejb-jar.xml
ファイルでのリレーションシップの宣言は複雑でエラーが発生しやすくなっています。CMR フィールドの配備記述子管理は XDoclet などのツール使用を推奨していますが、記述子について理解しておくことが重要です。以下で organization/gangster リレーションシップの宣言について説明します。
<ejb-jar> <relationships> <ejb-relation> <ejb-relation-name>Organization-Gangster</ejb-relation-name> <ejb-relationship-role> <ejb-relationship-role-name>org-has-gangsters </ejb-relationship-role-name> <multiplicity>One</multiplicity> <relationship-role-source> <ejb-name>OrganizationEJB</ejb-name> </relationship-role-source> <cmr-field> <cmr-field-name>memberGangsters</cmr-field-name> <cmr-field-type>java.util.Set</cmr-field-type> </cmr-field> </ejb-relationship-role> <ejb-relationship-role> <ejb-relationship-role-name> gangster-belongs-to-org </ejb-relationship-role-name> <multiplicity>Many</multiplicity> <cascade-delete/> <relationship-role-source> <ejb-name>GangsterEJB</ejb-name> </relationship-role-source> <cmr-field> <cmr-field-name>organization</cmr-field-name> </cmr-field> </ejb-relationship-role> </ejb-relation> </relationships> </ejb-jar>
これを見ればわかるように、トップレベルの
relationships
要素内で ejb-relation
要素付きのリレーションシップを宣言しています。リレーションシップには ejb-relation-name
要素で名前が付けられます。これは jbosscmp-jdbc.xml
ファイルで名前によってロールを参照するので重要です。各 ejb-relation
には 2 つの ejb-relationship-role
要素があります(リレーションシップの各サイドに一つずつ)。ejb-relationship-role
タグは以下のようになります。
- ejb-relationshiprole-name: ロールを識別し、
jbosscmp-jdbc.xml
ファイルをマッピングするデータベースとマッチさせるのに使用する任意の要素です。リレーションシップの各サイドに対するロール名はそれぞれ異なるものにしてください。 - multiplicity: これはリレーションシップのこちら側の多重度を示します。
One
またはMany
が値です。この例の場合、1 つの organization から 複数の gangster への関係なので、organization の多重度はOne
で、gangster はMany
になります。XML 要素と同様、大文字小文字が区別されますので注意してください。 - cascade-delete: この任意の要素が有効な場合、親エンティティが削除されると、子エンティティも削除されます。カスケードの削除は、リレーションシップの他サイドの多重度が 1 であるロールにのみ有効です。デフォルトでは、カスケードの削除はオフに設定されています。
- relationship-role-source
- ejb-name: 必須の要素で、ロールを持つエンティティの名称を付与します。
- cmr-field
- cmr-field-name: エンティティの CMR フィールドの名前がある場合は、その名称のことです。
- cmr-field-type: フィールドがコレクションタイプであれば、これは CMR フィールドのタイプです。
java.util.Collection
またはjava.util.Set
になります。
CMR フィールドの抽象アクセッサーを追加し、リレーションシップを宣言すると、リレーションシップが機能するようになります。次のセクションでは、リレーションシップのデータベースマッピングについて解説します。