About

ドキュメント

Javadoc

モジュール

プロジェクト文書

Built by Maven

概要

S2JDBC-Genでは、Gen-Ddlタスク を実行することで、エンティティ定義からDDLを出力できます。 ここでは、DDLの生成に大きく関わるエンティティの定義方法を説明します。

テーブル定義

テーブルの定義はTableアノテーションを用いて行います。

カタログ名

catalog属性を使用することで、カタログ名を指定できます。

@Table(catalog = "catalog")
public class Employee {
    ....
}

スキーマ名

schema属性を使用することで、スキーマ名を指定できます。

@Table(schema = "schema")
public class Employee {
    ....
}

テーブル名

name属性を使用することで、テーブル名を指定できます。

@Table(name = "emp")
public class Employee {
    ....
}

複合一意制約

uniqueConstraints属性を使用することで、複合一意制約を指定できます。 (columnNames属性に指定する値を1つにすれば、単一の一意制約になります。)

@Table(uniqueConstraints = { @UniqueConstraint(columnNames = { "first_name", "last_name" }) })
public class Employee {
    ....
}

カラム定義

カラムの定義はColumnアノテーションを用いて行います。

カラム名

name属性を使用することで、カラム名を指定できます。

@Column(name = "ename")
public String employeeName;

データ型

カラムのデータ型は長さのデフォルト値や2JDBC-Genのダイアレクトに従って自動で決定されます。 長さ、精度、スケールを指定する場合やデータ型を明記する場合は、Columnアノテーションを使用します。

@Column(length = 20)
public String employeeName;
	
@Column(precision = 10, scale = 2)
public BigDecimal salary;

上記の定義により、EMPLOYEE_NAMEカラムは長さ20の文字列型、 SALARYカラムは精度が10、スケールが2の数値型として定義されます。 Columnアノテーションを指定しない場合や、length、precision、scaleを指定しない場合のそれぞれのデフォルト値は次の表のとおりです。

属性 説明 デフォルト値
length 長さ。文字列型やバイナリ型に使用される。 255
precision 精度。数値型に使用される。 19
scale スケール。数値型に使用される。 0

以下に、エンティティクラスのプロパティの型と代表的なRDBMSのカラムの型の対応表を示します。 $l、$p、$sには、Columnアノテーションで指定するlength、precision、scaleの値が設定されます。 (この表は、エンティティからDDLを生成する際の対応表です。データベースからエンティティを生成する際の対応表ではありませn。)

Javaの型 Oracle SQL Server 2005 DB2 PostgreSQL MySQL
boolean/Boolean number(1,0) bit smallint bool boolean
short/Short number(5,0) smallint smallint smallint smallint
char/Character char(1) char(1) char(1) char(1) char(1)
int/Integer number(10,0) int integer integer/serial int
long/Long number($p,0) bigint bigint bigint/bigserial bigint
float/Float float float real float4 float($p,$s)
double/Double double precision double double float8 double($p,$s)
BigInteger number($p,0) bigint bigint bigint/bigserial bigint
BigDecimal number($p,$s) decimal($p,$s) decimal($p,$s) decimal($p,$s) decimal($p,$s)
String varchar2($l) varchar($l) varchar($l) varchar($l) varchar($l)
@LobつきString clob varchar(max) clob($l) text tinytext/text/mediumtext/longtext
byte[] raw varbinary($l) varchar($l) for bit data bytea binary($l)
@Lobつきbyte[] blob varbinary(max) blob($l) oid tinyblob/blob/mediumblob/longblob
Serializable raw varbinary($l) varchar($l) for bit data bytea binary($l)
@LobつきSerializable blob varbinary(max) blob($l) oid tinyblob/blob/mediumblob/longblob
java.sql.Time,
@Temporal(TeporalType.TIME)つきjava.util.Date,
@Temporal(TeporalType.TIME)つきCalendar
date datetime time time time
java.sql.Date,
@Temporal(TeporalType.DATE)つきjava.util.Date,
@Temporal(TeporalType.DATE)つきCalendar
date datetime date date date
java.sql.Timestamp,
@Temporal(TeporalType.TIMESTAMP)つきjava.util.Date,
@Temporal(TeporalType.TIMESTAMP)つきCalendar
timestamp datetime timestamp timestamp timestamp
Enum型 number(10,0)/varchar2($l) int/varchar($l) integer/varchar($l) integer/varchar($l) int/varchar($l)

ここで示されたもの以外のデータ型にマッピングしたい場合は、ColumnアノテーションのcolumnDefinition属性を使用します。

@Column(columnDefinition ="nvarchar2(100)")
public String employeeName;

columnDefinition属性を使用した場合は、指定した値がそのままテーブル作成のDDLに組み込まれます。 そのため、length、precision、scale属性の値は、参照されません。

デフォルト値

デフォルト値を指定するにはcolumnDefinition属性を使用します。

@Column(columnDefinition ="default 'unknown'")
public String employeeName;

columnDefinition属性にデータ型を指定する場合は、その値の後ろに指定します。

@Column(columnDefinition ="nvarchar2(100) default n'unknown'")
public String employeeName;

CHECK制約

CHECK制約を指定するにはcolumnDefinition属性を使用します。

@Column(columnDefinition ="check ...")
public String employeeName;

columnDefinition属性にデータ型を指定する場合は、その値の後ろに指定します。

@Column(columnDefinition ="nvarchar2(100) check ...")
public String employeeName;

一意制約

一意制約を指定するにはunique属性を使用します。

@Column(unique = true)
public String employeeName;

NOT NULL制約

NOT NULL制約を指定するにはnullable属性を使用します。

@Column(nullable = false)
public String employeeName;