30.5.2. リレーションシップの宣言
ejb-jar.xml ファイルでのリレーションシップの宣言は複雑でエラーが発生しやすくなっています。CMR フィールドの配備記述子管理は XDoclet などのツール使用を推奨していますが、記述子について理解しておくことが重要です。以下で organization/gangster リレーションシップの宣言について説明します。
これを見ればわかるように、トップレベルの
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 フィールドの抽象アクセッサーを追加し、リレーションシップを宣言すると、リレーションシップが機能するようになります。次のセクションでは、リレーションシップのデータベースマッピングについて解説します。