Defining Entities
ご覧のページは、お客様の利便性のために一部機械翻訳されています。また、ドキュメントは頻繁に更新が加えられており、翻訳は未完成の部分が含まれることをご了承ください。最新情報は都度公開されておりますため、必ず英語版をご参照ください。翻訳に問題がある場合は、 こちら までご連絡ください。

エンティティ列の定義

エンティティの列はその属性を表します。 これらの属性は、テーブルフィールドをJavaオブジェクトフィールドにマップします。

ここでは、 生成されたクラスの理解と拡張 のサンプル プロジェクトを調べて、列の詳細について学習します。

サンプルをダウンロードして解凍することから始めます。

curl https://resources.learn.liferay.com/examples/liferay-w9b7.zip -O
unzip liferay-w9b7.zip

w9b7-service/service.xmlファイルを調べます:

<?xml version="1.0"?>
<!DOCTYPE service-builder PUBLIC "-//Liferay//DTD Service Builder 7.4.0//EN" "http://www.liferay.com/dtd/liferay-service-builder_7_4_0.dtd">

<service-builder dependency-injector="ds" package-path="com.acme.w9b7" short-no-such-exception-enabled="false">
	<namespace>W9B7</namespace>
	<entity local-service="true" name="W9B7Entry" remote-service="false">

		<!-- PK fields -->

		<column name="w9b7EntryId" primary="true" type="long" />

		<!-- Other fields -->

		<column name="description" type="String" />
		<column name="name" type="String" />
	</entity>
</service-builder>

エンティティの属性を追加するには、エンティティ定義に<column />タグを追加します。

<column name="w9b7EntryId" primary="true" type="long" />

Service Builderを実行すると、オブジェクトリレーショナルマッピングを処理するHibernate構成が生成されます。 Service Builderは、service.xmlファイルに追加する列ごとにデータベースフィールドを作成します。 各列に指定されたJavaタイプに適したデータベースフィールド型をマップし、Liferayがサポートするすべてのデータベースにわたってマッピングを行います。 Service Builderは、これらの属性のモデルクラスにgetter/setterメソッドも生成します。 列のprimary(つまりプライマリーキー)属性がtrueに設定されている場合、その列はエンティティのプライマリーキーになります。 これは、 生成されたクラスの理解と拡張にある W9B7 アプリケーションの場合です。 primary属性をtrueに設定して複数の列を定義する場合、列を組み合わせることでエンティティの複合プライマリーキーが構成されます。 エンティティ インスタンスに一意の主キーを生成する方法については、 Add メソッドの実装 を参照してください。

エンティティの列を作成する

最初のエンティティに必要な列を定義します。 W9B7エンティティには、プライマリーキー、説明、および名前の3つの属性しかありません。

<column name="w9b7EntryId" primary="true" type="long" />
<column name="description" type="String" />
<column name="name" type="String" />

*service モジュールをデプロイすると、Service Builder はすべてのエンティティの主キーのインデックスを自動的に生成します。

アプリケーションで使用するJavaタイプを使用して、1つまたは複数のエンティティの属性ごとに列を作成します。 Service BuilderがSQLへのマッピングを処理します。

マルチテナンシーをサポートする

エンティティのプライマリーキーと属性の列に加えて、ポータルインスタンスIDとサイトIDの列を追加します。 次に、Liferayのマルチテナンシー機能をサポートすることで、各ポータルインスタンスとポータルインスタンス内の各サイトが、アプリケーションのデータの独立したセットを持つことができるようになります。 サイトのIDを保持するには、long型のgroupIdという列を追加します。 ポータルインスタンスのIDを保持するには、long型のcompanyIdという列を追加します。

<!-- Group instance -->

<column name="groupId" type="long" />
<column name="companyId" type="long" />

ワークフローフィールド

エンティティの進行状況を追跡するために必要なフィールドを追加することで、Liferay の ワークフロー システム をサポートできます。

<!-- Status fields -->

<column name="status" type="int" />
<column name="statusByUserId" type="long" />
<column name="statusByUserName" type="String" />
<column name="statusDate" type="Date" />

監査エンティティ

最後に、エンティティの監査に役立つ列を追加できます。 各エンティティインスタンスの所有者を追跡するために、long型のuserIdという列を追加します。 エンティティインスタンスの作成日を記録するために、Date型のcreateDateという名前の列を作成します。 エンティティインスタンスが最後に変更された時刻を追跡するために、Date型のmodifiedDateという名前の列を追加します。

<!-- Audit fields -->

<column name="userId" type="long" />
<column name="userName" type="String" />
<column name="createDate" type="Date" />
<column name="modifiedDate" type="Date" />

エンティティには、属性を表す列だけでなく、マルチテナンシー、ワークフロー、および監査をサポートする列もあります。