エンティティ・オブジェクトは、ビジネス・アプリケーションで使用される項目について、ルール、データ、関係、永続動作などのビジネス・モデルをカプセル化するクラスです。たとえば、エンティティ・オブジェクトで次の項目を表すことができます。
ビジネスの論理構造(製品ライン、部門、売上、地域など)
ビジネス文書(請求書、注文変更書、サービス要求など)
物理的な項目(倉庫、従業員、設備など)
オブジェクト指向の観点では、エンティティ・オブジェクトは、実世界のドメインにあるオブジェクトを表します。リレーショナル・データベースの観点では、エンティティ・オブジェクトは、データベース表(またはビュー、シノニムまたはスナップショット)のデータのJava表現を提供します。上級プログラマは、エンティティ・オブジェクトを他の種類のデータソース(スプレッドシート、フラット・ファイルおよびXMLファイルなど)にマップできます。
状況に応じて、エンティティ・オブジェクトを既存のデータベース表から自動的に作成する(逆方向生成)ことも、エンティティ・オブジェクトを定義し、それを使用してデータベース表を自動的に作成する(順方向生成)こともできます。
ビジネス・ロジックを作成する最適な場所はエンティティ・オブジェクトです。エンティティ・オブジェクトは、あらゆる種類のクライアント・インタフェースを介してアクセスされ、すべてのビューのデータに常にビジネス・ロジックを実行しているためです。ビジネス・ロジックには次の項目が含まれます。
ビジネス・ルールおよびポリシー: データを追加または変更する場合、データをデータベースに追加する前に、データが必ず組織の手続きに沿うようにできます。たとえば、従業員の昇進に伴う昇給、勤続3年の従業員に3週間の休暇を与える、注文の品目をすべて顧客に送ったら、注文の状態を出荷済に変更する、などです。
検証ロジック: 新規データを追加する場合、データベースにデータを格納する前に、データが有効であるかを確認できます。たとえば、職務コードが有効であることを確認できます。
削除ロジック: データの削除は、依存性が処理されたデータについて、適切な場合のみ行われます。たとえば、休職中の従業員を削除しないようにできます。
計算: ビジネス・ロジック層でデータ計算を効率よく実行できます。たとえば、従業員の月給を時間給に基づいて計算できます。
変更が適切でない場合は、エンティティ・オブジェクトのビジネス・ロジックによって、すぐにユーザーに通知されます。メモリー内ビジネス・モデルは、このようにして常に一貫性を保ちます。
Business Components for Javaのウィザードを使用して既存の表からエンティティ・オブジェクトを作成する場合(逆方向生成)、各データベース表に対して1つのエンティティ・オブジェクトが作成されます。このとき、データベース表の各列に対してエンティティ属性が作成されます。各属性は、列と同じ名前にすることも、ビジネス・アプリケーションの意味を表すような別の名前にすることもできます。エンティティ・オブジェクトの属性定義は、それぞれのデータベース列のプロパティ(データ型、列制約および精度やスケールの指定など)を反映し、またそのプロパティを施行します。
エンティティ・オブジェクトには各列の属性を定義できます。また、ある列を処理する必要がない場合や、1つの表に複数のエンティティの情報が含まれている場合には、サブセットを使用することもできます。
また、Business Components for Javaのウィザードにより、既存のデータベース表を使用せずにエンティティ・オブジェクト、およびエンティティ・オブジェクトの属性を定義できます(順方向生成)。ウィザードを使用してエンティティ・オブジェクトからデータベース表を生成すると、各エンティティ・オブジェクトに対応して表が、各エンティティ属性に対応して表の列が、エンティティ属性設定に基づいて列制約が作成されます。さらに、エンティティ制約ウィザードを使用して表の制約を定義できます。
通常、1つのエンティティ・オブジェクトは1つのデータベース表にマップされます。ただし、表に複数のカテゴリの情報を格納できるため、複数のエンティティ・オブジェクトをマップする場合もあります。
行ごとに異なるエンティティ・オブジェクトを適用できます。たとえば、Items表の各行に在庫品目、請求品目、注文明細などが格納されているとします。各種類の行に、1つの種類のエンティティ・オブジェクトを定義できます。この場合は、Itemエンティティ・オブジェクトと、それを拡張するInventoryItem、RequisitionItemおよびOrderItemのエンティティ・オブジェクトが定義されます。また、各エンティティ・オブジェクトについて、1つ以上の属性を識別子にするように定義すると、フレームワークで、行とエンティティ・オブジェクトのマップが自動的に判別され、エンティティ・オブジェクトの格納を管理できます。定義するエンティティ・オブジェクトに対応しない列は除外できます。ただし、各エンティティ・オブジェクトは常に主キーを含む必要があります。
同じ行に複数のエンティティ・オブジェクトをマップしないでください。
エンティティ・オブジェクト・ウィザードおよびエンティティ・オブジェクト・エディタを使用して、エンティティ・オブジェクトを作成および編集できます。逆方向生成では、ビジネス・コンポーネント・プロジェクト・ウィザード、あるいはビジネス・コンポーネント・パッケージ・ウィザードまたはパッケージ・エディタを使用し、デフォルトのエンティティ・オブジェクトを作成できます。デフォルトのエンティティ・オブジェクトには表の各列の属性が含まれます。デフォルトのエンティティ・オブジェクトはエンティティ・オブジェクト・エディタでカスタマイズできます。
JDeveloperでUMLのクラス図を使用してエンティティ・オブジェクトを作成することもできます。詳細は、「ビジネス・コンポーネントのモデル化」を参照してください。
実行時、各エンティティ・オブジェクト・インスタンスは、データベース表の1行を表し、そのデータを格納します。行ごとに1つのインスタンスのみが定義され、同じトランザクション内の同じエンティティ・オブジェクト・クラスのすべてのインスタンスは、まとめてキャッシュされます。同じ行を返す複数のビュー・オブジェクトの問合せでは、同じエンティティ・オブジェクト・インスタンスが参照されます。このため、更新はすべてのビュー・オブジェクトで参照できるようになり、1つのエンティティ・オブジェクトを複数のビュー・オブジェクトで使用できます。各エンティティ・オブジェクト・インスタンスは、主キー属性により一意に識別されます。詳細は、「ビジネス・ロジック層におけるキャッシュ・データ処理方法」を参照してください。
セキュリティ上の理由により、エンティティ・オブジェクトは、クライアントには公開されていません。かわりに、クライアントは1つ以上のビュー・オブジェクトを介してエンティティ・オブジェクトのデータにアクセスします。ビュー行クラスでは、公開するメソッドをコールするビュー行メソッドを記述することにより、エンティティ・オブジェクト・メソッドをクライアントが使用できるようにします。たとえば、この機能を使用してセキュリティを実装できます。つまり、様々なビュー・オブジェクトを作成することで、様々なクライアントが、エンティティ・オブジェクト・メソッドに多様なレベルでアクセスできるようにします。
エンティティ・オブジェクト間の関係は、Associationにより表現されます。関連元および関連先のエンティティ・オブジェクトの属性(通常はキー・フィールド)は一致している必要があります。Associationを介して行および行セットを返すアクセッサ・メソッドを、エンティティ・オブジェクト・クラスで使用できます。
アプリケーションで必要なエンティティ・オブジェクトを決定する場合、JDeveloperでは、UMLのクラス図でエンティティ・オブジェクトをモデル化できます。詳細は、「ビジネス・コンポーネントのモデル化」を参照してください。
関連項目
エンティティ・オブジェクトおよびAssociationの作成方法
エンティティ・オブジェクトを定義するファイルについて
検証ロジックについて