ドメインは、データベースに存在するOracleオブジェクトすべてに対して自動的に生成されます。ただし、ビジネス・コンポーネント・プロジェクトの開始後にOracleオブジェクトがデータベースに追加された場合、新規プロジェクトを開始せずに、そのOracleオブジェクトのドメインを作成できます。このトピックの残りの部分では、この方法を詳細に説明します。
Oracleオブジェクト型からドメインを作成する際、ドメイン・ウィザードはオブジェクトを使用して、ドメインを表すobject.java
ファイルをパッケージに作成します。このクラスは、オブジェクトの値をカプセル化し、OracleオブジェクトがマップされるJavaクラスを表します。ビルトインSQLデータ型から作成されるドメインとは異なり、Oracleオブジェクトに対して作成されるobject.java
ファイルは可変のJavaクラスです。object.java
ファイルには、個々の属性に対するゲッターおよびセッターが含まれます。たとえば、FirstName
属性およびLastName
属性を使用してNAME
オブジェクトを定義する場合、ドメイン・ウィザードは、メソッドgetFirstName
、setFirstName
、getLastName
および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オブジェクト型からドメインを作成するには、次のようにします。
cust_address_domain
と入力します。
cust_address_typ
を選択し、「次へ」をクリックします。 cust_address_typ
属性のプロパティを編集します。ドメイン属性は、Javaビジネス・オブジェクトのデータ型に自動的に割り当てられます(たとえばstreet_address
とString
)。「設定」ページでは、属性の削除や新規属性の作成もできます。ただし、この例については、変更を行わないでください。cust_address_domain.java
クラスには、street_address
、city
、state_province
など、各ドメイン属性に対するゲッターおよびセッターが含まれます。ドメインは、作成後、エンティティ属性のデータ型として再利用できます。
属性のゲッター・メソッドおよびセッター・メソッドを編集することにより、ドメインに独自の検証を追加できます。ここでは、country_id
がUS
であることを検証します。
属性のセッター・メソッドを編集するには、次のようにします。
public void setCountryId(String value) { setAttribute(4, value); \\ do I use an "if" statment or a try-catch block? help! }
ドメインは、作成後、エンティティ・オブジェクトの属性として割当て可能です。
Oracleオブジェクトをビジネス・コンポーネントとして表現する方法
VARRAYの表現
表へのREFによる列オブジェクトの置換
エンティティ・オブジェクト、Associationおよびデータベース表の生成について
エンティティ・オブジェクトとは
エンティティ属性とは
ビジネス・コンポーネントのデータ型