エンティティ列の定義

エンティティ列の定義

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

ここでは、Understanding Service Builder Generated Classesにあるサンプルプロジェクトを検討し、列の詳細を学習します。

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

curl https://resources.learn.liferay.com/dxp/latest/ja/building-applications/data-frameworks/service-builder/service-builder-basics/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に設定して複数の列を定義する場合、列を組み合わせることでエンティティの複合プライマリーキーが構成されます。

note

Implementing an Add Method では、エンティティインスタンスの一意のプライマリーキーを生成する方法を示しています。

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

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

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

<column name="description" type="String" />
<column name="name" type="String" />
note

*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" />

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