ヘッダーをスキップ
Oracle Fusion Middleware Oracle TopLink開発者ガイド
11gリリース1(11.1.1)
B56246-01
  目次
目次
索引
索引

戻る
戻る
 
次へ
次へ
 

6 Schema Managerの使用

SchemaManagerおよびその関連クラスにより、Javaアプリケーションから使用可能なAPIが提供されます。このAPIでは、汎用的な書式のデータベース表を指定した後で、それらの表を特定のリレーショナル・データベースで作成および変更できます。この方法では、TopLinkプロジェクトを特定のデータベース・スキーマから分離する一方で、データベース・スキーマをTopLinkプロジェクトに基づいてプログラム的に作成できます。たとえば、Schema Managerを使用して、非本番環境で本番データベースを再作成できます。このため、既存のデータベースのモデルを作成して、開発中にそのモデルの変更とテストを行うことができます。


注意:

Oracle JDeveloper TopLinkエディタ(第4章「Oracle JDeveloper TopLinkエディタの使用」を参照)またはTopLink Workbench(5.5.1.2項「新規表の作成」および5.5.3.4項「データベースでの表の作成」を参照)を使用してデータベース表を開発中に手動で作成することもできます。

この章の内容は次のとおりです。

6.1 Schema Managerの概要

図6-1では、重要なSchemaManagerクラスと、これらのクラスを使用する主な方法を示します。

図6-1 SchemaManagerの使用方法

図6-1の説明が続きます
「図6-1 SchemaManagerの使用方法」の説明

SchemaManager APIは直接使用できますが、TableCreatorクラスを作成してそのAPI(つまりSchemaManagerを使用)を使用することをお薦めします。

TableCreatorは、次の方法で自動的に生成できます。

TableCreatorクラスは1つ以上のTableDefinitionクラスを(各データベース表に1つ)所有しており、TableDefinitionクラスは1つ以上のFieldDefinitionクラスを(各フィールドに1つ)所有しています。

TableDefinitionクラスを使用すると、汎用的な書式のデータベース表スキーマを指定できます。実行時に、TopLinkでは、TopLinkプロジェクトに関連するセッションを使用してデータベース・タイプを特定し、汎用スキーマを使用してそのデータベースの適切な表およびフィールドを作成します。

TableCreatorクラスの作成後は、そのAPIを使用して表を作成および削除できます(6.3項「表作成機能による表の作成」を参照)。これを自動で行うようにTopLinkを構成することもできます(6.4項「データベース表の自動作成」を参照)。

Schema Managerはデータベース・タイプではなくJavaタイプを使用するため、データベースに依存しません。ただし、データベース固有の最適化は考慮しないため、本番ではなく開発の目的に最も適しています。Schema ManagerによるJavaタイプからデータベース・タイプへのマップ方法の詳細は、6.1.1項「Schema Managerを使用したJavaおよびデータベースのタイプ変換方法」を参照してください。

Schema ManagerではTopLinkプロジェクトで指定した順序付け構成を処理できますが、Oracle以外のデータベースで順序付けを使用する場合は、順序付けの制限があることに注意してください(6.1.2項「順序付けの使用方法」を参照)。

6.1.1 Schema Managerを使用したJavaおよびデータベースのタイプ変換方法

表6-1は、TopLinkプロジェクトで使用するデータベース・プラットフォームごとに、Schema ManagerでサポートされているJavaタイプからデータベース・タイプへの変換を示します。このリストはSchema Managerに固有のものであり、マッピングには適用されません。マッピング内では、データベース・タイプの変換が自動的に行われます。

表6-1 Javaおよびデータベース・フィールドのタイプ変換

Javaタイプ Oracle DB2 Sybase MySQL MS Access

java.lang.Boolean

NUMBER

SMALLINT

BIT(デフォルトは0)

TINYINT(1)

SHORT

java.lang.Byte

NUMBER

SMALLINT

SMALLINT

TINYINT

SHORT

java.lang.Byte[]

LONG RAW

BLOB

IMAGE

BLOB

LONGBINARY

java.lang.Character

CHAR

CHAR

CHAR

CHAR

TEXT

java.lang.Character[]

LONG

CLOB

TEXT

TEXT

LONGTEXT

java.lang.Double

NUMBER

FLOAT

FLOAT(32)

DOUBLE

DOUBLE

java.lang.Float

NUMBER

FLOAT

FLOAT(16)

FLOAT

DOUBLE

java.lang.Integer

NUMBER

INTEGER

INTEGER

INTEGER

LONG

java.lang.Long

NUMBER

INTEGER

NUMERIC

BIGINT

DOUBLE

java.lang.Short

NUMBER

SMALLINT

SMALLINT

SMALLINT

SHORT

java.lang.String

VARCHAR2

VARCHAR

VARCHAR

VARCHAR

TEXT

java.math.BigDecimal

NUMBER

DECIMAL

NUMERIC

DECIMAL

DOUBLE

java.math.BigInteger

NUMBER

DECIMAL

NUMERIC

BIGINT

DOUBLE

java.sql.Date

DATE

DATE

DATETIME

DATE

DATETIME

java.sql.Time

DATE

TIME

DATETIME

TIME

DATETIME

java.sql.Timestamp

DATE

TIMESTAMP

DATETIME

DATETIME

DATETIME


TopLinkでサポートされているデータベース・プラットフォームの詳細は、96.1.3.1項「データベース・プラットフォーム」を参照してください。

6.1.2 順序付けの使用方法

TopLink Workbench(6.2.1項「開発中のTopLink Workbenchの使用方法」を参照)またはDefaultTableGenerator6.2.2項「実行時のデフォルトの表ジェネレータの使用方法」を参照)を使用してTableCreatorクラスを生成する場合は、TopLinkプロジェクトの構成に従って、順序付け構成がTableCreatorに取り込まれます。この場合、TableCreatorメソッドcreateTablesの使用時に次の処理が行われます。

  • セッションのDatabaseLoginで定義したとおりに順序表を作成する。

  • セッションに登録されているすべてのディスクリプタについて、各順序名の順序を作成または挿入する。

  • Oracleのネイティブ順序付けを使用する場合、Oracleのシーケンス・オブジェクトを作成する。

SybaseやMicrosoft SQL Serverのネイティブ順序付けなどの特殊なケースの処理には、拡張APIを使用できます(6.2.3項「Javaを使用した表作成機能の作成方法」を参照)。

順序付けの詳細は、18.2項「リレーショナル・プロジェクトにおける順序付け」を参照してください。

6.2 表作成機能の作成

TableCreatorは、次の方法で自動的に生成できます。

TableCreatorクラスの作成後は、そのAPIを使用して表を作成および削除できます(6.3項「表作成機能による表の作成」を参照)。

6.2.1 開発中のTopLink Workbenchの使用方法

JavaアプリケーションでSchemaManagerによるデータベース・スキーマの再作成に使用できるTableCreatorクラスを作成するには、次の手順を実行します。

  1. ナビゲータでプロジェクトを右クリックし、コンテキスト・メニューから「エクスポート」「表作成Javaソース」を選択します。表作成機能ダイアログ・ボックスが表示されます。

    表を選択し、メニューから「選択」「エクスポート」「表作成Javaソース」を選択することもできます。

  2. 表作成クラスの名前を入力し、「OK」をクリックします。「別名保存」ダイアログ・ボックスが表示されます。

  3. 表作成クラスの場所を選択し、「OK」をクリックします。指定した場所に表作成Javaクラスがエクスポートされます。

6.2.2 実行時のデフォルトの表ジェネレータの使用方法

DefaultTableGeneratorを使用してJavaでTableCreatorクラスを作成するには、次の手順を実行します。

  1. DefaultTableGeneratorのインスタンスをTopLinkプロジェクトのインスタンス付きで作成します。

    DefaultTableGenerator myDefTblGen = new DefaultTableGenerator(toplinkProject);
    
  2. TableCreatorインスタンスを作成します。

    • TableCreatorであらゆるセッションをサポートできるようにする場合は、次のように指定します。

      TableCreator myTblCre = myDefTblGen.generateDefaultTableCreator();
      
    • TableCreatorを特定のTopLinkセッション用にカスタマイズするには、次のように指定します。

      TableCreator myTblCre = myDefTblGen.generateFilteredDefaultTableCreator(toplinkSession);
      

DefaultTableGeneratorを使用してTableCreatorを実行時に生成および実行するよう、TopLinkを構成することもできます(6.4項「データベース表の自動作成」を参照)。

6.2.3 Javaを使用した表作成機能の作成方法

この項では、次のようなJavaでのTableCreatorクラスの作成方法を説明します。

6.2.3.1 TableCreatorクラスの作成

独自のTableCreatorインスタンスを作成するには、例6-1に示すようにTableCreatorを拡張します。

例6-1 TableCreatorクラスの作成

public class MyTableCreator extends oracle.toplink.tools.schemaframework.TableCreator {

    public M7TableCreator() {
        setName("MyTableCreator");
        addTableDefinition(buildADDRESSTable());
    ...
    }

    public TableDefinition buildADDRESSTable() {
        TableDefinition table = new TableDefinition();
       ...
       return table;
    }
...
}

6.2.3.2 TableDefinitionクラスの作成

TableDefinitionクラスには、表とそのすべてのフィールドの名前およびプロパティなど、新しい表の作成に必要な情報がすべて含まれています。

TableDefinitionクラスには、次のメソッドがあります。

  • setName

  • addField

  • addPrimaryKeyField

  • addIdentityField

  • addForeignKeyConstraint

表定義はすべて、setNameメソッドをコールして、TableDefinitionによって記述される表の名前を設定する必要があります。

6.2.3.3 TableDefinitionへのフィールドの追加

addFieldメソッドを使用して、TableDefinitionにフィールドを追加します。表に主キー・フィールドを追加するには、addFieldメソッドではなくaddPrimaryKeyFieldメソッドを使用します。

異なるデータベース間の互換性を維持するには、typeパラメータに、データベース・フィールド・タイプではなくJavaクラスを指定する必要があります。Javaクラスは、実行時に適切なデータベース・フィールド・タイプに変換されます。たとえばdBaseデータベースの場合、StringクラスはCHARタイプに変換されます。ただし、Sybaseに接続する場合は、StringクラスがVARCHARに変換されます。詳細は、6.1.1項「Schema Managerを使用したJavaおよびデータベースのタイプ変換方法」を参照してください。

サイズとサブサイズを指定する必要のある列タイプについては、fieldSizeまたはfieldSubSizeパラメータを指定してaddFieldメソッドをコールすることもできます。

サブサイズは、データベースによって必要な場合と必要ではない場合があります。適宜、TopLinkによって必要な情報が自動的に提供されます。

6.2.3.4 SybaseとMicrosoft SQL Serverのネイティブ順序付けの定義

FieldDefinitionメソッドaddIdentityFieldを使用して、SybaseまたはMicrosoft SQL Serverのネイティブ順序付けから生成された順序番号を表すフィールドを追加します。順序付けの使用の詳細は、18.2.2.6項「Oracle以外のデータベース・プラットフォームによるネイティブ順序付け」を参照してください。

6.3 表作成機能による表の作成

TableCreatorクラスの作成後は(6.2項「表作成機能の作成」を参照)、そのAPIを使用して表を作成および削除できます。重要なTableCreatorメソッドは次のとおりです(各メソッドはDatabaseSessionのインスタンスを取得します)。

6.4 データベース表の自動作成

JPAプロジェクトおよびEJB CMPプロジェクトでデータベース表を自動的に作成するようTopLinkを構成できます。

6.4.1 JPAプロジェクトでのデータベース表の自動作成

persistence.xmlファイルで定義できるEclipseLink JPA永続性単位プロパティを使用して、スキーマの生成を構成できます。

詳細は、『EclipseLink Developer's Guide』の「Using EclipseLink JPA Extensions for Schema Generation」(http://wiki.eclipse.org/Using_EclipseLink_JPA_Extensions_%28ELUG%29#Using_EclipseLink_JPA_Extensions_for_Schema_Generation)を参照してください。

6.4.2 EJB CMPプロジェクトでのデータベース表の自動作成

TopLinkを永続性マネージャとして使用するように構成されているOC4JにCMPプロジェクトをデプロイすると、永続オブジェクト用のデータベース表を自動的に作成(および必要に応じて削除)するようOC4Jを構成できます。

データベース表の自動作成は、表6-2に示すように、3つのレベルのいずれかで構成できます。システム・レベルの構成はアプリケーション・レベルでオーバーライドでき、システムおよびアプリケーションの構成はEJBモジュール・レベルでオーバーライドできます。

表6-2 自動表生成の構成

レベル 構成ファイル 設定

システム(グローバル)

<OC4J_HOME>/config/application.xml

autocreate-tables

TrueまたはFalse脚注1



autodelete-tables

TrueまたはFalse脚注1

アプリケーション(EAR)

orion-application.xml

autocreate-tables

TrueまたはFalse脚注1



autodelete-tables

TrueまたはFalse脚注1

EJBモジュール(JAR)

orion-ejb-jar.xml

pm-propertiesサブ要素default-mapping属性db-table-gen脚注2

CreateDropAndCreateまたはUseExisting脚注3


脚注1 デフォルトです。

脚注2 詳細は、9.9.1.3項「default-mappingのプロパティの構成」を参照してください。

脚注3 表6-3を参照してください。


注意:

デフォルト・マッピングの場合、autocreate-tables設定に対するデフォルト値はtrueです。

自動表生成をEJBモジュール・レベルで構成すると、db-table-gen属性に割り当てる値は、表6-3に示すようにautocreate-tablesおよびautodelete-tablesの設定に対応します。

表6-3 db-table-genに対応する設定

db-table-gen設定 autocreate-tables設定 autodelete-tables設定

Create

True

False

DropAndCreate

True

True

UseExisting

False

なし


この機能はデフォルト・マッピングと組み合せて使用できます(17.2.3.4項「実行時にOC4Jを使用するEJB 2.n CMPプロジェクトでのデフォルト・マッピング」を参照)。