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では、重要なSchemaManager
クラスと、これらのクラスを使用する主な方法を示します。
SchemaManager
APIは直接使用できますが、TableCreator
クラスを作成してそのAPI(つまりSchemaManager
を使用)を使用することをお薦めします。
TableCreator
は、次の方法で自動的に生成できます。
開発中にTopLink Workbenchを使用(6.2.1項「開発中のTopLink Workbenchの使用方法」を参照)
実行時にDefaultTableGenerator
を使用(6.2.2項「実行時のデフォルトの表ジェネレータの使用方法」を参照)
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は、TopLinkプロジェクトで使用するデータベース・プラットフォームごとに、Schema ManagerでサポートされているJavaタイプからデータベース・タイプへの変換を示します。このリストはSchema Managerに固有のものであり、マッピングには適用されません。マッピング内では、データベース・タイプの変換が自動的に行われます。
表6-1 Javaおよびデータベース・フィールドのタイプ変換
Javaタイプ | Oracle | DB2 | Sybase | MySQL | MS Access |
---|---|---|---|---|---|
|
NUMBER |
SMALLINT |
BIT(デフォルトは0) |
TINYINT(1) |
SHORT |
|
NUMBER |
SMALLINT |
SMALLINT |
TINYINT |
SHORT |
|
LONG RAW |
BLOB |
IMAGE |
BLOB |
LONGBINARY |
|
CHAR |
CHAR |
CHAR |
CHAR |
TEXT |
|
LONG |
CLOB |
TEXT |
TEXT |
LONGTEXT |
|
NUMBER |
FLOAT |
FLOAT(32) |
DOUBLE |
DOUBLE |
|
NUMBER |
FLOAT |
FLOAT(16) |
FLOAT |
DOUBLE |
|
NUMBER |
INTEGER |
INTEGER |
INTEGER |
LONG |
|
NUMBER |
INTEGER |
NUMERIC |
BIGINT |
DOUBLE |
|
NUMBER |
SMALLINT |
SMALLINT |
SMALLINT |
SHORT |
|
VARCHAR2 |
VARCHAR |
VARCHAR |
VARCHAR |
TEXT |
|
NUMBER |
DECIMAL |
NUMERIC |
DECIMAL |
DOUBLE |
|
NUMBER |
DECIMAL |
NUMERIC |
BIGINT |
DOUBLE |
|
DATE |
DATE |
DATETIME |
DATE |
DATETIME |
|
DATE |
TIME |
DATETIME |
TIME |
DATETIME |
|
DATE |
TIMESTAMP |
DATETIME |
DATETIME |
DATETIME |
TopLinkでサポートされているデータベース・プラットフォームの詳細は、96.1.3.1項「データベース・プラットフォーム」を参照してください。
TopLink Workbench(6.2.1項「開発中のTopLink Workbenchの使用方法」を参照)またはDefaultTableGenerator
(6.2.2項「実行時のデフォルトの表ジェネレータの使用方法」を参照)を使用してTableCreator
クラスを生成する場合は、TopLinkプロジェクトの構成に従って、順序付け構成がTableCreator
に取り込まれます。この場合、TableCreator
メソッドcreateTables
の使用時に次の処理が行われます。
セッションのDatabaseLogin
で定義したとおりに順序表を作成する。
セッションに登録されているすべてのディスクリプタについて、各順序名の順序を作成または挿入する。
Oracleのネイティブ順序付けを使用する場合、Oracleのシーケンス・オブジェクトを作成する。
SybaseやMicrosoft SQL Serverのネイティブ順序付けなどの特殊なケースの処理には、拡張APIを使用できます(6.2.3項「Javaを使用した表作成機能の作成方法」を参照)。
順序付けの詳細は、18.2項「リレーショナル・プロジェクトにおける順序付け」を参照してください。
TableCreator
は、次の方法で自動的に生成できます。
Oracle JDeveloper(開発中)。
TopLink Workbenchを使用(開発中)(6.2.1項「開発中のTopLink Workbenchの使用方法」を参照)。
DefaultTableGenerator
を使用(実行時)(6.2.2項「実行時のデフォルトの表ジェネレータの使用方法」を参照)。
TableCreator
クラスの作成後は、そのAPIを使用して表を作成および削除できます(6.3項「表作成機能による表の作成」を参照)。
JavaアプリケーションでSchemaManager
によるデータベース・スキーマの再作成に使用できるTableCreator
クラスを作成するには、次の手順を実行します。
DefaultTableGenerator
を使用してJavaでTableCreator
クラスを作成するには、次の手順を実行します。
DefaultTableGenerator
のインスタンスをTopLinkプロジェクトのインスタンス付きで作成します。
DefaultTableGenerator myDefTblGen = new DefaultTableGenerator(toplinkProject);
TableCreator
インスタンスを作成します。
TableCreator
であらゆるセッションをサポートできるようにする場合は、次のように指定します。
TableCreator myTblCre = myDefTblGen.generateDefaultTableCreator
();
TableCreator
を特定のTopLinkセッション用にカスタマイズするには、次のように指定します。
TableCreator myTblCre = myDefTblGen.generateFilteredDefaultTableCreator
(toplinkSession);
DefaultTableGenerator
を使用してTableCreator
を実行時に生成および実行するよう、TopLinkを構成することもできます(6.4項「データベース表の自動作成」を参照)。
この項では、次のようなJavaでの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; } ... }
TableDefinition
クラスには、表とそのすべてのフィールドの名前およびプロパティなど、新しい表の作成に必要な情報がすべて含まれています。
TableDefinition
クラスには、次のメソッドがあります。
setName
addField
addPrimaryKeyField
addIdentityField
addForeignKeyConstraint
表定義はすべて、setName
メソッドをコールして、TableDefinition
によって記述される表の名前を設定する必要があります。
addField
メソッドを使用して、TableDefinition
にフィールドを追加します。表に主キー・フィールドを追加するには、addField
メソッドではなくaddPrimaryKeyField
メソッドを使用します。
異なるデータベース間の互換性を維持するには、typeパラメータに、データベース・フィールド・タイプではなくJavaクラスを指定する必要があります。Javaクラスは、実行時に適切なデータベース・フィールド・タイプに変換されます。たとえばdBaseデータベースの場合、String
クラスはCHAR
タイプに変換されます。ただし、Sybaseに接続する場合は、String
クラスがVARCHAR
に変換されます。詳細は、6.1.1項「Schema Managerを使用したJavaおよびデータベースのタイプ変換方法」を参照してください。
サイズとサブサイズを指定する必要のある列タイプについては、fieldSize
またはfieldSubSize
パラメータを指定してaddField
メソッドをコールすることもできます。
サブサイズは、データベースによって必要な場合と必要ではない場合があります。適宜、TopLinkによって必要な情報が自動的に提供されます。
FieldDefinition
メソッドaddIdentityField
を使用して、SybaseまたはMicrosoft SQL Serverのネイティブ順序付けから生成された順序番号を表すフィールドを追加します。順序付けの使用の詳細は、18.2.2.6項「Oracle以外のデータベース・プラットフォームによるネイティブ順序付け」を参照してください。
TableCreator
クラスの作成後は(6.2項「表作成機能の作成」を参照)、そのAPIを使用して表を作成および削除できます。重要なTableCreator
メソッドは次のとおりです(各メソッドはDatabaseSession
のインスタンスを取得します)。
createTables
: このメソッドは、表の作成、制約の追加、および順序表と順序の作成を行います(順序表がすでに存在する場合、このメソッドはそれを削除してから再作成します)。
dropTables
: このメソッドは、TableCreator
が定義するすべての制約と表を削除します(順序表は除く)。
createConstraints
: このメソッドは、TableCreator
が定義する既存のすべての表に対する制約を作成します。
dropConstraints
: このメソッドは、TableCreator
が定義する既存のすべての表に対する制約を削除します。
replaceTables
: このメソッドは、TableCreator
が定義するすべての表を削除してから再作成します。
JPAプロジェクトおよびEJB CMPプロジェクトでデータベース表を自動的に作成するようTopLinkを構成できます。
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
)を参照してください。
TopLinkを永続性マネージャとして使用するように構成されているOC4JにCMPプロジェクトをデプロイすると、永続オブジェクト用のデータベース表を自動的に作成(および必要に応じて削除)するようOC4Jを構成できます。
データベース表の自動作成は、表6-2に示すように、3つのレベルのいずれかで構成できます。システム・レベルの構成はアプリケーション・レベルでオーバーライドでき、システムおよびアプリケーションの構成はEJBモジュール・レベルでオーバーライドできます。
表6-2 自動表生成の構成
レベル | 構成ファイル | 設定 | 値 |
---|---|---|---|
システム(グローバル) |
|
|
|
|
|
||
アプリケーション(EAR) |
|
|
|
|
|
||
EJBモジュール(JAR) |
|
|
|
脚注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設定 |
---|---|---|
|
|
|
|
|
|
|
|
なし |
この機能はデフォルト・マッピングと組み合せて使用できます(17.2.3.4項「実行時にOC4Jを使用するEJB 2.n CMPプロジェクトでのデフォルト・マッピング」を参照)。