nec-cmp-mappings.xmlファイル

この文書では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の階層構造を表しています。

check-modified-at-commit

コミット時にBeanのコンカレントな修正をチェックします。

副要素

なし

cmp-field-mapping

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-field-mapping

コンテナ管理によるリレーション(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フィールドのリレーションのフェッチグループを指定します。

cmr-field-name

フィールドのJava識別子を指定します。ejb-jar.xmlファイル中のcmr-field-name副要素の値と一致する必要があります。

副要素

なし

column-name

主テーブルからのカラムの名前を指定するか、副テーブル、あるいは関連付けられたテーブルからのカラムのテーブル修飾名(TABLE.COLUMN)を指定します。

副要素

なし

column-pair

2つのデータベーステーブルのリレーションを決定するカラムのペアを指定します。column-pairにはかならず2つのcolumn-name副要素が必要です。最初のcolumn-name要素はこのBeanがマッピングされたテーブルのカラム名を示します。2番目のcolumn-nameは関連付けられたテーブルのカラム名を示します。

副要素

column-pair要素の副要素は以下のとおりです。

副要素 必要性 説明
column-name 2つ 主テーブルからのカラムの名前を指定するか、副テーブル、あるいは関連付けられたテーブルからのカラムのテーブル修飾名(TABLE.COLUMN)を指定します。

consistency

Bean中のデータのトランザクション一貫性の保障のためのコンテナの動作を指定します。

副要素

consistency要素の副要素は以下のとおりです。

副要素 必要性 説明
check-modified-at-commit どれか1つを指定 コミット時にBeanのコンカレント修正をチェックします。
lock-when-loaded データがロードされたとき排他的ロックを行います。
none 一貫性チェックを行いません。

ejb-name

コンテナ管理による永続性(CMP)Beanに対応するejb-jar.xmlファイル中のEntity Beanのejb-nameを指定します。

副要素

なし

entity-mapping

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

フィールドとリレーションのフェッチグループの設定を指定します。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 このフィールド、またはリレーションが自分自身によってフェッチされることを指定します。

field-name

フィールドのJava識別子を指定します。この識別子は、ejb-jar.xmlファイルのcmp-field要素中のfield-name副要素の値と一致する必要があります。

副要素

なし

level

階層的なフェッチグループの名前を指定します。名前は整数でなければなりません。指定された値と等しいか、より小さい階層的フェッチグループに所属するフィールドとリレーションが同時にフェッチされます。値は0よりも大きくなくてはなりません。1つしか許容されません。

副要素

なし

lock-when-loaded

Beanがロードされたときいつも、Beanに対応した列にデータベースが更新ロックをかけます。ロックがどのように行われるかはデータベース依存になります。ロックはトランザクションが終了したとき(コミットやロールバック)に解放されます。ロックが掛けられている間、他のデータベースユーザはBeanへの読み取りアクセスが行えます。

副要素

なし

named-group

独立したフェッチグループの名前を指定します。指定されたグループの一部であるすべてのフィールドとリレーションは同時にフェッチされます。フィールドはフェッチグループのタイプに関わらず、1つのフェッチグループにのみ所属できます。1つのみ許容されます。

副要素

なし

nec-cmp-mapping

特定のデータベーススキーマへマッピングされるBeanを指定します。

注意:たとえBeanが同じEJB JARファイル内で配備されても、異なったデータベーススキーマへマップされたBeanとリレーションを持つことはできません。

副要素

nec-cmp-mapping要素の副要素は以下のとおりです。

副要素 必要性 説明
schema 1つのみ データベーススキーマの記述を含むファイルを指定します。
entity-mapping 1つ以上 データベースのカラムへのBeanのマッピングを指定します。

nec-cmp-mappings

EJB JARコレクション内でマッピングされるすべてのBeanのnec-cmp-mapping要素の集合を指定します。

副要素

nec-cmp-mappings要素の副要素は以下のとおりです。

副要素 必要性 説明
nec-cmp-mapping 1つ以上 特定のデータベーススキーマにマッピングされるBeanを指定します。

none

fetched-with要素の副要素の場合、フィールドまたはリレーションが、ほかのフィールドやリレーションではなく、自分自身によってフェッチされることを指定します。

consistency要素の副要素の場合、トランザクションの一貫性チェックを行わないことを指定します。

副要素

なし

read-only

フィールドが読み取り専用であることを指定します。

副要素

なし

schema

nec-cmp-mappings.xmlファイルの中のBeanがマッピングされるデータベーススキーマの記述を含むファイルを指定します。この要素が空ならば、配備時に自動的にデータベーススキーマファイルが生成されます。空でなければ、schema要素はnec-cmp-mapping.xmlファイルを含むディレクトリとの相対的なパス名がついた.dbschemaファイルを拡張子なしで指定してください。

<schema/> <!-- 自動スキーマ生成機能を使用します -->
<schema>CompanySchema</schema> <!-- "CompanySchema.dbschema"ファイルを使用します -->

データベーススキーマの自動キャプチャを参照

副要素

なし

secondary-table

Beanの副テーブルを指定します。

副要素

secondary-table要素の副要素は以下のとおりです。

副要素 必要性 説明
table-name 1つのみ データベーステーブルの名前を指定します。
column-pair 1つ以上 2つのデータベーステーブルの間のリレーションを決定するカラムのペアを指定します。

table-name

データベーステーブルの名前を指定します。このテーブルはデータベーススキーマファイルに存在していなければなりません。データベーススキーマの自動キャプチャ参照。

副要素

なし

データベーススキーマ定義のサンプル
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>