開発時に、開発したEntityの動作を確認するために、以下のテーブル自動生成機能を提供しています。
テーブルの自動生成機能
モジュールの配備時にEntityに対応するテーブルを生成します。
テーブルの自動再生成機能
モジュールの再配備時にEntityに対応するテーブルを再生成します。
テーブルの自動削除機能
モジュールの配備解除時にEntityに対応するテーブルを削除します。
テーブル生成と削除のDDL(データ定義命令)をファイルに書き込む機能
モジュールの配備時にテーブル生成と削除のDDLをファイルに書き込みます。このファイルに書き込まれたDDLを基にDBMSのツールによりユーザがテーブルを作成できます。
テーブル生成時と削除時にJDBCドライバ経由でテーブル作成命令(CREATE TABLE)、シーケンス作成命令(CREATE SEQUENCE、INSERT INTO SEQUENCE)や外部キー制約追加命令(ALTER TABLE ADD CONSTRAINT)、または制約削除命令(ALTER TABLE DROP CONSTRAINT)、シーケンス削除命令(DROP SEQUENCE)やテーブル削除命令(DROP TABLE)をデータベースに発行します。データベースによるほかの準備がある場合、データベースとJDBCドライバのマニュアルを参照して実施してください。
本機能を使用するには、Interstage Java EE DASサービスにJDBCドライバの環境設定を行い、deployment descriptor (persistence.xml)のプロパティ定義またはasadminコマンドのdeployとundeployサブコマンドのテーブル生成オプションを使用します。
JDBCドライバの環境設定方法については「5.14.1 JDBCドライバの環境設定」を参照し、asadminコマンドのdeployサブコマンドとundeployサブコマンドのオプションについては、asadminコマンドの「11.1.8 アプリケーション配備」を参照してください。
deployment descriptor (persistence.xml)に指定するプロパティを以下に示します。
永続性ユニットプロパティ名 | 値(太字:省略値) | 説明 |
---|---|---|
toplink.ddl-generation | create-tables | テーブル生成のDDLをデータベースへ発行します。テーブルがすでに存在する場合、警告を出力し既存テーブルを変更せずに配備を継続します。 |
drop-and-create-tables | 再配備の場合は、テーブル削除のDDLをデータベースへ発行してからテーブル生成のDDLを発行します。 | |
none | toplink.ddl-generation.output-modeを定義してもテーブルとDDLを生成しません。 | |
toplink.ddl-generation.output-mode | sql-script | テーブル生成と削除のDDLをファイルに書き込みます。 |
database | テーブル生成と削除のDDLをファイルに書き込んでデータベースへ発行します。 | |
both(注1) | ||
none | toplink.ddl-generationを定義してもテーブルとDDLを生成しません。 | |
toplink.application-location | <パス> | DDLファイルの格納先です。発行されるDDLを確認したい場合は指定してください。 (注2) |
toplink.create-ddl-jdbc-file-name | <ファイル名> | テーブル生成のDDLのファイル名です。 (注3) |
toplink.drop-ddl-jdbc-file-name | <ファイル名> | テーブル削除のDDLのファイル名です。 (注4) |
値に固定値を指定するプロパティの場合、値は大文字と小文字を区別しません。
toplink.ddl-generation.output-modeはsql-script、database、both、none以外の値を設定する場合、設定値が無視されて、デフォルトのbothになります。
省略した場合は、以下のとおりになります。SolarisまたはLinuxの場合、「¥」を「/」に読み替えてください。
配備モジュール内のpersistence.xmlの格納場所 | DDLファイルのデフォルトの格納先 |
---|---|
EJB-JARまたはWARファイル内 | [Java EE共通ディレクトリ]\domains\interstage\generated\ejb\j2ee-modules\[アプリケーション名] |
EARに含むEJB-JARまたはWARファイル内 | [Java EE共通ディレクトリ]\domains\interstage\generated\ejb\j2ee-apps\[アプリケーション名] |
EARに含むライブラリなど、その他 | [Java EE共通ディレクトリ]\domains\interstage\generated\ejb\j2ee-apps\[アプリケーション名] |
省略した場合は、以下のとおりになります。 (注5)
[モジュール名] + "_" + [永続性ユニット名] + "_createDDL.jdbc"
省略した場合は、以下のとおりになります。 (注5)
[モジュール名] + "_" + [永続性ユニット名] + "_dropDDL.jdbc"
モジュール名は、以下のようにアプリケーションの配備時にdeployment descriptor (persistence.xml)が格納される場所によります。永続性ユニット名は、deployment descriptor (persistence.xml)に指定したpersistence-unitの名前を指しています。
配備モジュール内のpersistence.xmlの格納場所 | DDLファイル名に使用するモジュール名 |
---|---|
EJB-JARまたはWARファイル内 | EJB-JARまたはWARファイル名(拡張子を除く) |
EARに含むEJB-JARまたはWARファイル内 | EARファイル名+[_]+EJB-JARまたはWARファイル名(両方拡張子を除く) |
EARに含むライブラリなど、その他 | 「default」 |
例
テーブル自動生成定義例
<persistence xmlns="http://java.sun.com/xml/ns/persistence" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://java.sun.com/xml/ns/persistence http://java.sun.com/xml/ns/persistence/persistence_1_0.xsd" version="1.0"> <persistence-unit name="com.company.my.pu"> <jta-data-source>jdbc/myDatasource</jta-data-source> <properties> <property name="toplink.ddl-generation" value="drop-and-create-tables"/> <property name="toplink.ddl-generation.output-mode" value="sql-script"/> <property name="toplink.application-location" value="/tmp/ddl"/> <property name="toplink.create-ddl-jdbc-file-name" value="myds-create-ddl.sql"/> <property name="toplink.drop-ddl-jdbc-file-name" value="myds-drop-ddl.sql"/> </properties> </persistence-unit> </persistence>
注意
データベーステーブル自動生成機能に関する注意事項
自動生成したテーブル、またはテーブルのDDLは開発環境用です。運用環境では、データベース管理者が用意したテーブルを使用してください。
Symfowareを使用する場合、自動生成されたプライマリキーのカラムに対してインデックスの作成が必要になります。Symfowareのマニュアルを参照してインデックスを作成してください。
テーブル生成とテーブル削除のDDLファイル名として同じファイル名を指定しないでください。
配備解除時のテーブル削除には、テーブル削除のDDLファイルに格納されているDDLが使用されるため、このファイルを削除すると配備解除時にテーブル削除が失敗しエラーが出力されます。
Java SE環境、またはアプリケーションクライアントコンテナでアプリケーション管理のEntity Managerを取得する場合、データベーステーブル自動生成機能は、配備時ではなくEntity Manager生成時に実行されます。この際、toplink.application-locationプロパティを省略した場合のDDLの格納先はJVMのカレントディレクトリになります。また、toplink.create-ddl-jdbc-file-name プロパティ、またはtoplink.drop-ddl-jdbc-file-name プロパティを省略した場合のDDLファイルのファイル名は以下になります。
createDDL.jdbc
dropDDL.jdbc
Entityの永続化フィールドに対応するDBMSカラムのSQLデータ型は、以下の例のように定義できます。
@Column(columnDefinition="VARCHAR(128) NOT NULL") |
Entityの永続化フィールドに対応するDBMSカラムのSQLデータ型を定義しない場合は、DBMSによる以下のデフォルトが使用されます。
Javaのデータ型 | DBMSのSQLデータ型 | |||
---|---|---|---|---|
Symfoware | Oracle | SQL Server | Java DB | |
boolean | SMALLINT | NUMBER(1) | BIT | SMALLINT |
byte | SMALLINT | NUMBER(3) | SMALLINT | SMALLINT |
char | CHARACTER(1) | CHAR(1) | CHAR(1) | CHAR(1) |
short | SMALLINT | NUMBER(5) | SMALLINT | SMALLINT |
int | INTEGER | NUMBER(10) | INTEGER | INTEGER |
long | NUMERIC(18) | NUMBER(19) | NUMERIC(19) | BIGINT |
float | NUMERIC(18,4) | NUMBER(19,4) | FLOAT(16) | FLOAT |
double | NUMERIC(18,4) | NUMBER(19,4) | FLOAT(32) | FLOAT |
java.lang.String | VARCHAR(255) | VARCHAR2(255) | VARCHAR(255) | VARCHAR(255) |
java.math.BigDecimal | DECIMAL(18) | NUMBER(38) | NUMERIC(28) | DECIMAL |
java.math.BigInteger | NUMERIC(18) | NUMBER(38) | NUMERIC(28) | BIGINT |
java.sql.Date | DATE | DATE | DATETIME | DATE |
java.sql.Time | TIME | TIMESTAMP | DATETIME | TIME |
java.sql.Timestamp | TIMESTAMP | TIMESTAMP | DATETIME | TIMESTAMP |
java.util.Date | 指定したTemporalTypeのマッピングを参照 | |||
java.util.Calendar | ||||
byte[] | BLOB(1024) | LONG RAW | IMAGE | BLOB(64000) |
java.lang.Byte[] | BLOB(1024) | LONG RAW | IMAGE | BLOB(64000) |
char[] | VARCHAR(32000) | LONG | TEXT | CLOB(255) |
java.lang.Character[] | VARCHAR(32000) | LONG | TEXT | CLOB(255) |
enum(ordinal) | java.lang.Integerのマッピングを参照 | |||
enum(String) | java.lang.Stringのマッピングを参照 | |||
Serializableオブジェクト | BLOB(1024) | LONG RAW | IMAGE | BLOB(64000) |
(LOB)byte[] | BLOB(1024) | BLOB | IMAGE | BLOB(64000) |
(LOB)java.lang.Byte[] | BLOB(1024) | BLOB | IMAGE | BLOB(64000) |
(LOB)Serializableオブジェクト | BLOB(1024) | BLOB | IMAGE | BLOB(64000) |
(LOB)char[] | VARCHAR(32000) | CLOB | TEXT | CLOB(64000) |
(LOB)java.lang.Character[] | VARCHAR(32000) | CLOB | TEXT | CLOB(64000) |
(LOB)java.lang.String | VARCHAR(32000) | CLOB | TEXT | CLOB(64000) |