この文書ではnec-cmp-mappings.xmlファイルのXML要素について説明し、データベーススキーマとXMLファイルのサンプルを提示します。
|
nec-cmp-mappings.xmlファイルのXML要素
|
nec-cmp-mappings.xmlファイルのXML要素について説明します。
nec-cmp-mappings.xmlファイルでは、nec-cmp-mappings要素がすべての要素の親要素となります。
nec-cmp-mappings.xmlファイルのサンプルを参照してください。
以下の目次は、nec-cmp-mappings.xmlの階層構造を表しています。
コミット時にBeanのコンカレントな修正をチェックします。
なし
cmp-field-mapping要素はあるフィールドとそれとマッピングする1つあるいは複数のカラムとの関連付けを行います。カラムはBeanの主テーブルのもの、または定義された副テーブルのものであっても構いません。フィールドが複数のカラムにマッピングされるならこの要素で最初に書かれたカラムが、データベースから値を得るソースとして使用されます。カラムは表示順に更新されます。
ejb-jar.xmlファイル中で定義されるcmp-field要素に対して、それぞれ1つのcmp-field-mappingが存在します。
cmp-field-mapping要素の副要素は以下のとおりです。
| 副要素 |
必要性 |
説明 |
| field-name |
1つのみ |
フィールドのJava識別子を指定します。識別子はマッピングされるcmp-field副要素のfield-name値と一致しなければなりません
|
| column-name |
1つ以上 |
主テーブルからのカラムの名前を指定するか、副テーブル、あるいは関連付けられたテーブルからのカラムのテーブル修飾名(TABLE.COLUMN)を指定します。
|
| read-only
| 0か1つ |
フィールドが読み取り専用であることを指定します。
|
| fetched-with |
0か1つ |
このCMPフィールドのマッピングのフェッチグループを指定します。
|
コンテナ管理によるリレーション(CMR)フィールドはリレーションを定義したnameと1つまたは複数のカラムのペアを持ちます。ejb-jar.xmlファイルにはそれぞれのcmr-fieldに一つのcmr-field-mapping要素が存在します。リレーションはフェッチグループに参加することもできます。
cmr-field-mapping要素の副要素は以下のとおりです
| 副要素 |
必要性 |
説明 |
| cmr-field-name |
1つのみ |
フィールドのJava識別子を指定します。ejb-jar.xmlファイル中のcmr-field-name副要素の値と一致する必要があります。
|
| column-pair |
1つ以上 |
2個のデータベーステーブルの間のリレーションを決定するカラムの組を指定します。
|
| fetched-with |
0か1つ |
このCMRフィールドのリレーションのフェッチグループを指定します。
|
フィールドのJava識別子を指定します。ejb-jar.xmlファイル中のcmr-field-name副要素の値と一致する必要があります。
なし
主テーブルからのカラムの名前を指定するか、副テーブル、あるいは関連付けられたテーブルからのカラムのテーブル修飾名(TABLE.COLUMN)を指定します。
なし
2つのデータベーステーブルのリレーションを決定するカラムのペアを指定します。column-pairにはかならず2つのcolumn-name副要素が必要です。最初のcolumn-name要素はこのBeanがマッピングされたテーブルのカラム名を示します。2番目のcolumn-nameは関連付けられたテーブルのカラム名を示します。
column-pair要素の副要素は以下のとおりです。
| 副要素 |
必要性 |
説明 |
| column-name |
2つ |
主テーブルからのカラムの名前を指定するか、副テーブル、あるいは関連付けられたテーブルからのカラムのテーブル修飾名(TABLE.COLUMN)を指定します。
|
Bean中のデータのトランザクション一貫性の保障のためのコンテナの動作を指定します。
consistency要素の副要素は以下のとおりです。
コンテナ管理による永続性(CMP)Beanに対応するejb-jar.xmlファイル中のEntity Beanのejb-nameを指定します。
なし
Beanのデータベースのカラムへのマッピングを指定します。
entity-mapping要素の副要素は以下のとおりです。
| 副要素 |
必要性 |
説明 |
| ejb-name |
1つのみ |
コンテナ管理による永続性(CMP)Beanに対応するejb-jar.xmlファイル中のEntity Beanのejb-nameを指定します。
|
| table-name |
1つのみ |
データベーステーブルの名前を指定します。テーブルはデータベーススキーマファイル中に存在している必要があります。
|
| cmp-field-mapping |
1つ以上 |
フィールドと、マッピングする1つまたは複数のカラムを関連付けます。
|
| cmr-field-mapping |
0以上 |
コンテナ管理によるリレーション(CMR)フィールドはリレーションを定義したnameと1つまたは複数のカラムのペアを持ちます。
|
| secondary-table |
0以上 |
Beanの主テーブルと副テーブルのリレーションを記述します。
|
| consistency |
0か1つ |
Bean中のデータのトランザクション一貫性の保障のためのコンテナの動作を指定します。
|
フィールドとリレーションのフェッチグループの設定を指定します。fetched-with要素は親要素に従って、違ったデフォルト値を持ちます。
cmp-field-mappingの副要素としてのfetched-with副要素がないなら、デフォルト値は次のように仮定されます。
<fetched-with><level>0</level></fetched-with>
CMPフィールドはデフォルトのフェッチグループにおかれます。これはデータベースからBeanがロードされたとき、いつもフェッチされることを示します。
cmr-field-mappingの副要素としてのfetched-with副要素がないなら、デフォルト値は次のように仮定されます。
<fetched-with><none/></fetched-with>
CMRフィールドは別々のフェッチグループに置かれます。それは、トランザクション内でそれが初めてアクセスされるときデータベースからロードされることを意味します。
fetched-with要素の副要素は以下のとおりです。
| 副要素 |
必要性 |
説明 |
| level |
どれか1つを指定 |
階層的なフェッチグループの名前を指定します。
|
| named-group |
独立したフェッチグループの名前を指定します。
|
| none |
このフィールド、またはリレーションが自分自身によってフェッチされることを指定します。
|
フィールドのJava識別子を指定します。この識別子は、ejb-jar.xmlファイルのcmp-field要素中のfield-name副要素の値と一致する必要があります。
なし
階層的なフェッチグループの名前を指定します。名前は整数でなければなりません。指定された値と等しいか、より小さい階層的フェッチグループに所属するフィールドとリレーションが同時にフェッチされます。値は0よりも大きくなくてはなりません。1つしか許容されません。
なし
Beanがロードされたときいつも、Beanに対応した列にデータベースが更新ロックをかけます。ロックがどのように行われるかはデータベース依存になります。ロックはトランザクションが終了したとき(コミットやロールバック)に解放されます。ロックが掛けられている間、他のデータベースユーザはBeanへの読み取りアクセスが行えます。
なし
独立したフェッチグループの名前を指定します。指定されたグループの一部であるすべてのフィールドとリレーションは同時にフェッチされます。フィールドはフェッチグループのタイプに関わらず、1つのフェッチグループにのみ所属できます。1つのみ許容されます。
なし
特定のデータベーススキーマへマッピングされるBeanを指定します。
注意:たとえBeanが同じEJB JARファイル内で配備されても、異なったデータベーススキーマへマップされたBeanとリレーションを持つことはできません。
nec-cmp-mapping要素の副要素は以下のとおりです。
| 副要素 |
必要性 |
説明 |
| schema |
1つのみ |
データベーススキーマの記述を含むファイルを指定します。
|
| entity-mapping |
1つ以上 |
データベースのカラムへのBeanのマッピングを指定します。
|
EJB JARコレクション内でマッピングされるすべてのBeanのnec-cmp-mapping要素の集合を指定します。
nec-cmp-mappings要素の副要素は以下のとおりです。
fetched-with要素の副要素の場合、フィールドまたはリレーションが、ほかのフィールドやリレーションではなく、自分自身によってフェッチされることを指定します。
consistency要素の副要素の場合、トランザクションの一貫性チェックを行わないことを指定します。
なし
フィールドが読み取り専用であることを指定します。
なし
nec-cmp-mappings.xmlファイルの中のBeanがマッピングされるデータベーススキーマの記述を含むファイルを指定します。この要素が空ならば、配備時に自動的にデータベーススキーマファイルが生成されます。空でなければ、schema要素はnec-cmp-mapping.xmlファイルを含むディレクトリとの相対的なパス名がついた.dbschemaファイルを拡張子なしで指定してください。
例
<schema/> <!-- 自動スキーマ生成機能を使用します -->
<schema>CompanySchema</schema> <!-- "CompanySchema.dbschema"ファイルを使用します -->
データベーススキーマの自動キャプチャを参照
なし
Beanの副テーブルを指定します。
secondary-table要素の副要素は以下のとおりです。
| 副要素 |
必要性 |
説明 |
| table-name |
1つのみ |
データベーステーブルの名前を指定します。
|
| column-pair |
1つ以上 |
2つのデータベーステーブルの間のリレーションを決定するカラムのペアを指定します。
|
データベーステーブルの名前を指定します。このテーブルはデータベーススキーマファイルに存在していなければなりません。データベーススキーマの自動キャプチャ参照。
なし
create table TEAMEJB (
TEAMID varchar2(256) not null,
NAME varchar2(120) null,
CITY char(30) not null,
LEAGUEEJB_LEAGUEID varchar2(256) null,
constraint PK_TEAMEJB primary key (TEAMID)
)
create table PLAYEREJB (
POSITION varchar2(15) null,
PLAYERID varchar2(256) not null,
NAME char(64) null,
SALARY number(10, 2) not null,
constraint PK_PLAYEREJB primary key (PLAYERID)
)
create table LEAGUEEJB (
LEAGUEID varchar2(256) not null,
NAME varchar2(256) null,
SPORT varchar2(256) null,
constraint PK_LEAGUEEJB primary key (LEAGUEID)
)
create table PLAYEREJBTEAMEJB (
PLAYEREJB_PLAYERID varchar2(256) null,
TEAMEJB_TEAMID varchar2(256) null
)
alter table TEAMEJB
add constraint FK_LEAGUE foreign key (LEAGUEEJB_LEAGUEID)
references LEAGUEEJB (LEAGUEID)
alter table PLAYEREJBTEAMEJB
add constraint FK_TEAMS foreign key (PLAYEREJB_PLAYERID)
references PLAYEREJB (PLAYERID)
alter table PLAYEREJBTEAMEJB
add constraint FK_PLAYERS foreign key (TEAMEJB_TEAMID)
references TEAMEJB (TEAMID)
| nec-cmp-mappings.xmlファイルのサンプル |
以下のマッピングは配備可能なEJB JARファイルの
META-INF/nec-cmp-mappings.xmlファイルです
<?xml version="1.0" encoding="UTF-8"?>
<nec-cmp-mappings>
<nec-cmp-mapping>
<schema>Roster</schema>
<entity-mapping>
<ejb-name>TeamEJB</ejb-name>
<table-name>TEAMEJB</table-name>
<cmp-field-mapping>
<field-name>teamId</field-name>
<column-name>TEAMEJB.TEAMID</column-name>
</cmp-field-mapping>
<cmp-field-mapping>
<field-name>name</field-name>
<column-name>TEAMEJB.NAME9</column-name>
</cmp-field-mapping>
<cmp-field-mapping>
<field-name>city</field-name>
<column-name>TEAMEJB.CITY</column-name>
</cmp-field-mapping>
<cmr-field-mapping>
<cmr-field-name>league</cmr-field-name>
<column-pair>
<column-name>TEAMEJB.LEAGUEEJB_LEAGUEID</column-name>
<column-name>LEAGUEEJB.LEAGUEID</column-name>
</column-pair>
<fetched-with>
<none/>
</fetched-with>
</cmr-field-mapping>
<cmr-field-mapping>
<cmr-field-name>players</cmr-field-name>
<column-pair>
<column-name>TEAMEJB.TEAMID</column-name>
<column-name>PLAYEREJBTEAMEJB.TEAMEJB_TEAMID</column-name>
</column-pair>
<column-pair>
<column-name>PLAYEREJBTEAMEJB.PLAYEREJB_PLAYERID</column-name>
<column-name>PLAYEREJB.PLAYERID</column-name>
</column-pair>
<fetched-with>
<none/>
</fetched-with>
</cmr-field-mapping>
</entity-mapping>
<entity-mapping>
<ejb-name>PlayerEJB</ejb-name>
<table-name>PLAYEREJB</table-name>
<cmp-field-mapping>
<field-name>position</field-name>
<column-name>PLAYEREJB.POSITION9</column-name>
</cmp-field-mapping>
<cmp-field-mapping>
<field-name>playerId</field-name>
<column-name>PLAYEREJB.PLAYERID</column-name>
</cmp-field-mapping>
<cmp-field-mapping>
<field-name>name</field-name>
<column-name>PLAYEREJB.NAME9</column-name>
</cmp-field-mapping>
<cmp-field-mapping>
<field-name>salary</field-name>
<column-name>PLAYEREJB.SALARY</column-name>
</cmp-field-mapping>
<cmr-field-mapping>
<cmr-field-name>teams</cmr-field-name>
<column-pair>
<column-name>PLAYEREJB.PLAYERID</column-name>
<column-name>PLAYEREJBTEAMEJB.PLAYEREJB_PLAYERID</column-name>
</column-pair>
<column-pair>
<column-name>PLAYEREJBTEAMEJB.TEAMEJB_TEAMID</column-name>
<column-name>TEAMEJB.TEAMID</column-name>
</column-pair>
<fetched-with>
<none/>
</fetched-with>
</cmr-field-mapping>
</entity-mapping>
<entity-mapping>
<ejb-name>LeagueEJB</ejb-name>
<table-name>LEAGUEEJB</table-name>
<cmp-field-mapping>
<field-name>leagueId</field-name>
<column-name>LEAGUEEJB.LEAGUEID</column-name>
</cmp-field-mapping>
<cmp-field-mapping>
<field-name>name</field-name>
<column-name>LEAGUEEJB.NAME9</column-name>
</cmp-field-mapping>
<cmp-field-mapping>
<field-name>sport</field-name>
<column-name>LEAGUEEJB.SPORT</column-name>
</cmp-field-mapping>
<cmr-field-mapping>
<cmr-field-name>teams</cmr-field-name>
<column-pair>
<column-name>LEAGUEEJB.LEAGUEID</column-name>
<column-name>TEAMEJB.LEAGUEEJB_LEAGUEID</column-name>
</column-pair>
<fetched-with>
<none/>
</fetched-with>
</cmr-field-mapping>
</entity-mapping>
</nec-cmp-mapping>
</nec-cmp-mappings>