ユーザー定義ドメインによるOracleオブジェクト型の表現

ドメインは、データベースに存在するOracleオブジェクトすべてに対して自動的に生成されます。ただし、ビジネス・コンポーネント・プロジェクトの開始後にOracleオブジェクトがデータベースに追加された場合、新規プロジェクトを開始せずに、そのOracleオブジェクトのドメインを作成できます。このトピックの残りの部分では、この方法を詳細に説明します。

Oracleオブジェクト型からドメインを作成する際、ドメイン・ウィザードはオブジェクトを使用して、ドメインを表すobject.javaファイルをパッケージに作成します。このクラスは、オブジェクトの値をカプセル化し、OracleオブジェクトがマップされるJavaクラスを表します。ビルトインSQLデータ型から作成されるドメインとは異なり、Oracleオブジェクトに対して作成されるobject.javaファイルは可変のJavaクラスです。object.javaファイルには、個々の属性に対するゲッターおよびセッターが含まれます。たとえば、FirstName属性およびLastName属性を使用してNAMEオブジェクトを定義する場合、ドメイン・ウィザードは、メソッドgetFirstNamesetFirstNamegetLastNameおよびsetLastNameを含むName.javaファイルを作成します。その後、NAME型のオブジェクトを表すために、プログラムでNameを属性のデータ型として使用できます。

JDeveloperで作成されたobject.javaファイルには、個々の属性に対するゲッターおよびセッターが含まれます。検証は、属性のゲッターおよびセッターで行います。アプリケーションでオブジェクトが使用される際、オブジェクトの属性が作成または出現するたびに、オブジェクトの属性が検証されます。これによって、再作成または再検証せずに、複数の場所でオブジェクトを参照または再使用し、層またはアプリケーション間で受け渡すことができます(validate()メソッドを介してコンストラクタを検証することはできません。このメソッドは、Oracleオブジェクトから作成されたドメインに対しては生成されません)。

次の例では、データベースにOracleオブジェクト型がすでに存在することを前提としています。

この例では、customers表を使用します。customers表には、顧客のcust_address列のデータ型としてOracleオブジェクトcust_address_typが含まれます。オブジェクト型は、次のように定義されます。
CREATE TYPE cust_address_typ AS OBJECT
  ( street_address VARCHAR2(40)
  , postal_code VARCHAR2(10)
  , city VARCHAR2(30)
  , state_province VARCHAR2(10)
  , country_id CHAR(2)
  );
  /

Oracleオブジェクト型からドメインを作成するには、次のようにします。

  1. パッケージを右クリックし、「新規ドメイン」を選択してドメイン・ウィザードを開きます。
  2. ドメイン・ウィザードの「名前」ページで、cust_address_domainと入力します。
  3. 「Oracleオブジェクト型のドメイン」チェックボックスをチェックし、データベースで使用可能なオブジェクト型のリストを表示します。「使用可能な型」リストからcust_address_typを選択し、「次へ」をクリックします。
  4. 「設定」ページで、「属性」ドロップダウン・リストを使用し、既存のcust_address_typ属性のプロパティを編集します。ドメイン属性は、Javaビジネス・オブジェクトのデータ型に自動的に割り当てられます(たとえばstreet_addressString)。「設定」ページでは、属性の削除や新規属性の作成もできます。ただし、この例については、変更を行わないでください。
  5. 「終了」をクリックします。ウィザードによって、再利用可能なドメインが作成されます。

cust_address_domain.javaクラスには、street_addresscitystate_provinceなど、各ドメイン属性に対するゲッターおよびセッターが含まれます。ドメインは、作成後、エンティティ属性のデータ型として再利用できます。

属性のゲッター・メソッドおよびセッター・メソッドを編集することにより、ドメインに独自の検証を追加できます。ここでは、country_idUSであることを検証します。

属性のセッター・メソッドを編集するには、次のようにします。

  1. ナビゲータで、cust_address_domainを開きます。
  2. cust_address_domain.javaをダブルクリックし、コード・エディタで開きます。
  3. 構造ペインで、setCountryId(Sting)をダブルクリックし、コード・エディタでその行に移動します。
  4. ソース・コードを次のように変更します。
    public void setCountryId(String value) {
      setAttribute(4, value);
      \\ do I use an "if" statment or a try-catch block? help!
    }

ドメインは、作成後、エンティティ・オブジェクトの属性として割当て可能です。


関連項目

Oracleオブジェクトをビジネス・コンポーネントとして表現する方法
VARRAYの表現
表へのREFによる列オブジェクトの置換
エンティティ・オブジェクト、Associationおよびデータベース表の生成について
エンティティ・オブジェクトとは
エンティティ属性とは
ビジネス・コンポーネントのデータ型