ページの先頭行へ戻る
Interstage Application Server/Interstage Web Server Java EE運用ガイド

3.8.6 データベーステーブル自動生成機能

開発時に、開発したEntityの動作を確認するために、以下のテーブル自動生成機能を提供しています。

テーブル生成時と削除時に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を発行します。
新規配備の場合は、テーブル生成の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)

値に固定値を指定するプロパティの場合、値は大文字と小文字を区別しません。

注1)

toplink.ddl-generation.output-modeはsql-script、database、both、none以外の値を設定する場合、設定値が無視されて、デフォルトのbothになります。

注2)

省略した場合は、以下のとおりになります。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\[アプリケーション名]

注3)

省略した場合は、以下のとおりになります。 (注5)

  • [モジュール名] + "_" + [永続性ユニット名] + "_createDDL.jdbc"

注4)

省略した場合は、以下のとおりになります。 (注5)

  • [モジュール名] + "_" + [永続性ユニット名] + "_dropDDL.jdbc"

注5)

モジュール名は、以下のようにアプリケーションの配備時に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")
public String name ;


Entityの永続化フィールドに対応するDBMSカラムのSQLデータ型を定義しない場合は、DBMSによる以下のデフォルトが使用されます。

Javaのデータ型

DBMSのSQLデータ型

Symfoware

Oracle

SQL Server

Java DB

boolean
java.lang.Boolean

SMALLINT
default 0

NUMBER(1)
default 0

BIT
default 0

SMALLINT
DEFAULT 0

byte
java.lang.Byte

SMALLINT

NUMBER(3)

SMALLINT

SMALLINT

char
java.lang.Character

CHARACTER(1)

CHAR(1)

CHAR(1)

CHAR(1)

short
java.lang.Short

SMALLINT

NUMBER(5)

SMALLINT

SMALLINT

int
java.lang.Integer

INTEGER

NUMBER(10)

INTEGER

INTEGER

long
java.lang.Long

NUMERIC(18)

NUMBER(19)

NUMERIC(19)

BIGINT

float
java.lang.Float

NUMERIC(18,4)

NUMBER(19,4)

FLOAT(16)

FLOAT

double
java.lang.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)