概要
S2JDBC-Genでは、Gen-Ddlタスク を実行することで、エンティティ定義からDDLを出力できます。 ここでは、DDLの生成に大きく関わるエンティティの定義方法を説明します。
カラム定義
カラムの定義はColumnアノテーションを用いて行います。
データ型
カラムのデータ型は長さのデフォルト値や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;