エンティティファインダーメソッドの定義
ファインダーメソッドは、指定されたパラメーターに基づいてデータベースからエンティティオブジェクトを取得します。 定義されたファインダーごとに、Service Builderは、ファインダーのパラメーターに基づいてエンティティインスタンスを取得、検索、削除、およびカウントするためのいくつかのメソッドを生成します。
Liferayのマルチテナンシーをサポートする場合、サイトごとにエンティティを見つけることができることが重要です。
ファインダーの作成
ファインダーは簡単に作成できます。
<finder name="GroupId" return-type="Collection">
<finder-column name="groupId" />
</finder>
上記の例は、最も単純なファインダーの1つであり、マルチテナンシーをサポートしている場合は常に追加する必要があります。 このファインダーは、アプリケーションが配置されたサイトに属するオブジェクトのコレクションを返します。 Service Builderは、*Persistenceクラスと*PersistenceImplクラスのエンティティに対して、ファインダー関連のメソッド(たとえば、fetchByGroupId、findByGroupId、removeByGroupId、countByGroupId)を生成します。 これらのクラスのうち、最初のクラスはインターフェイス、2番目はその実装です。 たとえば、Liferay の Blogs アプリケーションは、 -Persistence クラス ( blogs-api/src/main/java/com/liferay/blogs/service/persistence フォルダ内) と -PersistenceImpl クラス ( blogs-service/src/main/java/com/liferay/blogs/service/persistence/impl フォルダ内) にエンティティ ファインダー メソッドを生成します。
ただし、1列で検索には限定されません。複数列のファインダーを作成できます。
<finder name="G_UT" return-type="BlogsEntry" unique="true">
<finder-column name="groupId" />
<finder-column name="urlTitle" />
</finder>
エンティティのプライマリーキーをパラメーターとして使用するファインダーは作成しないでください。 Service Builder はすべてのエンティティの主キーに対して findByPrimaryKey および fetchByPrimaryKey メソッドを自動的に生成するため、これらは必要ありません。 *service モジュールをデプロイすると、Service Builder はすべてのエンティティの主キー列とファインダー列のインデックスを作成します。 エンティティの主キーを使用するファインダーを追加すると、同じ列に対して複数のインデックスを作成しようとする試みが発生します—たとえば、Oracle DB では、これらの試みがエラーとして報告されます。
このように、Service Builderを使用してエンティティのファインダーメソッドを作成することは複雑ではありません。