About

ドキュメント

Javadoc

モジュール

プロジェクト文書

Built by Maven

説明

概要

データベースのメタデータを読み取りエンティティクラスを生成します。

パラメータ

トップレベルのパラメータ

属性 説明 デフォルト値 必須
schemaName このタスクが対象とするスキーマ名です。 - NO
tableNamePattern このタスクが対象とするテーブル名の正規表現です。 ".*" NO
ignoreTableNamePattern このタスクが対象としないテーブル名の正規表現です。 "(SCHEMA_INFO|.*\$.*)" NO
versionColumnNamePattern エンティティのプロパティに@Versionを付与するカラム名の正規表現です。大文字小文字の違いは考慮されません。 "VERSION([_]?NO)?" NO
entitySuperclassName エンティティクラスのスーパークラスの完全修飾名です。スーパークラスに@MappedSuperclassが指定されている場合スーパークラスに定義されたプロパティと同じ名前のプロパティはエンティティクラスに出力されません。スーパークラスはクラスパス上に存在する必要があります。 - NO
idGeneration 識別子を生成する方法です。"auto", "identity", "sequence", "table", "assigned" のいずれかの値を指定できます。使用するRDBMSがサポートしていない場合、"identity"や"sequence"を指定するとエラーが発生します。 "assigned" NO
initialValue 識別子の初期値です。シーケンスやテーブルを使って採番する場合にのみ使用されます。指定しない場合は、@SequenceGeneratorや@TableGeneratorのデフォルト値が使用されます。 - NO
allocationSize 識別子の割り当てサイズです。シーケンスやテーブルを使って採番する場合にのみ使用されます。指定しない場合は、@SequenceGeneratorや@TableGeneratorのデフォルト値が使用されます。 - NO
pluralFormFile @OneToManyの関連プロパティ名を複数形で作成する際に使用される辞書ファイルです。 - NO
useAccessor "true"の場合、生成するエンティティにアクセサメソッドを付与します。 "false" NO
showCatalogName "true"の場合、@Tableのcatalog属性にカタログ名を明記します。 "false" NO
showSchemaName "true"の場合、@Tableのschema属性にスキーマ名を明記します。 "false" NO
showTableName "true"の場合、@Tableのname属性にテーブル名を明記します。 "false" NO
showColumnName "true"の場合、@Columnのname属性にカラム名を明記します。 "false" NO
showColumnDefinition "true"の場合、@ColumnのcolumnDefinition属性にカラム定義を明記します。 "false" NO
showJoinColumn "true"の場合、@JoinColumnを明記します。 "false" NO
entityTemplateFileName エンティティクラスのテンプレートファイル名です。 "java/entity.ftl" NO
templateFileEncoding テンプレートファイルのエンコーディングです。 "UTF-8" NO
templateFilePrimaryDir テンプレートファイルを検索する際の優先ディレクトリです。 - NO
rootPackageName ルートパッケージ名です。 "" NO
entityPackageName エンティティクラスのパッケージ名です。エンティティクラスは、rootPackageNameとこの値をピリオドで連結したパッケージに配置されます。 "entity" NO
javaFileDestDir Javaファイルの出力先ディレクトリです。 "src/main/java" NO
javaFileEncoding Javaファイルのエンコーディングです。 "UTF-8" NO
overwrite "true"の場合、エンティティクラスのJavaファイルを上書きします。 "false" NO
genDialectClassName S2JDBC-Genのダイアレクトインタフェースの実装クラス名です。ここに指定するクラスはorg.seasar.extension.jdbc.gen.dialect.GenDialectインタフェースを実装している必要があります。指定しない場合はS2JDBCのダイアレクト に対応したデフォルトのクラスが使用されます。 - NO
configPath JdbcManagerのコンポーネント定義を含む設定ファイルです。 "s2jdbc.dicon" NO
env 環境名です。 "ut" NO
jdbcManagerName JdbcManagerのコンポーネント名です。接続先のデータベースはJdbcManagerのコンポーネント名によって決まります。 "jdbcManager" NO
factoryClassName S2JDBC-Genの公開されたインタフェースの実装を作成するファクトリのクラス名です。S2JDBC-Genをカスタマイズする場合に独自のファクトリクラスを指定できます。ここに指定するクラスはorg.seasar.extension.jdbc.gen.internal.factory.Factoryインタフェースを実装している必要があります。 "org.seasar.extension.jdbc.gen
.internal.factory.FactoryImpl"
NO
commandInvokerClassName S2JDBC-Genのコマンドを呼び出すクラスの名前です。コマンドの呼び出し前後で任意の処理を実行したい場合に指定します。ここに指定するクラスはorg.seasar.extension.jdbc.gen.command.CommandInvokerインタフェースを実装している必要があります。 "org.seasar.extension.jdbc.gen
.internal.command.CommandInvokerImpl"
NO
classpath このタスクを実行する際のクラスパスです。 - classpathrefが指定されていない場合YES
classpathref このタスクを実行する際のクラスパスの参照です。 - classpathが指定されていない場合YES

ネストした要素として指定されるパラメータ

jvmArg

このタスクの大部分の処理は別VMで行われます。VMに引数を渡す場合は<jvmarg>要素を使用します。 これはAntのJavaタスクで使用できる<jvmarg>と同じです。 使用可能な属性やネストした要素についてはAntのドキュメントを参照してください。

エンティティクラスに共通のスーパークラスを指定する

entitySuperclassName属性に、エンティティクラスに共通のスーパークラスの名前を指定できます。 たとえば、エンティティに対応するすべてのテーブルにCREATE_TIMESTAMPとUPDATE_TIMESTAMPというカラムが定義されている場合、 次のようなクラスを作成し、すべてのエンティティのスーパークラスに指定できます。

@MappedSuperclass
public abstract class AbstractEntity {
    @Temporal(TemporalType.TIMESTAMP)
    public Date createTimestamp;
    @Temporal(TemporalType.TIMESTAMP)
    public Date updateTimestamp;
}

スーパークラス名をGen-EntityタスクのentitySuperclassName属性に指定します。

<gen-entity
    rootPackageName="examples"
    entitySuperclassName="examples.AbstractEntity"
    classpathRef="classpath"
/>

タスクを実行するとexamples.AbstractEntityを継承した次のようなクラスが生成されます。

@Entity
public class Employee extends AbstractEntity {
    @Id
    public Integer id;
    public String name;
}
@Entity
public class Department extends AbstractEntity {
    @Id
    public Integer id;
    public String name;
}

一対多の関連プロパティ名を英単語の複数形にする

一対多の関連プロパティ名は、デフォルトでは、関連先のエンティティ名を小文字にした文字列とListというサフィックスの結合文字列として表されます。

@Entity
public class Department {
    @Id
    public Identity id;
    @OneToManay(mappedBy = "department")
    public List<Employee> employeeList;
}

辞書ファイルを用意することで、英単語の複数形変換のルールに則ることができます。 たとえば、ごく基本的な変換ルールを記述した辞書ファイルは次のようになります。

(.*)(f|fe)$=$1ves
(.*[^aiueo])y$=$1ies
(.*(s|x|sh|ch|o))$=$1es
(.*)$=$1s

辞書ファイルはプロパティファイルの形式で記述します。 行の先頭が「#」や「!」で始まる場合は、コメント行とみなされます。 「=」の左側には関連先エンティティ名の先頭を小文字にした文字列にマッチさせる正規表現を記述します。 「=」の右側には、マッチした場合の置換文字列を記述します。置換文字列には\1や\2などのようにグループの参照を含められます。 辞書ファイルを使った評価は正規表現にマッチするまで上から1行ずつ順に行われます。 どの行にもマッチしない場合、関連プロパティ名は、デフォルトと同様、関連先のエンティティ名を小文字にした文字列とListというサフィックスの結合文字列になります。

辞書ファイルはpluralFormFile属性に指定できます。(ここでは辞書ファイルの名前をplural.propertiesとします。)

<gen-entity
    rootPackageName="examples"
    pluralFormFile="plural.properties"
    classpathRef="classpath"
/>

上記の置換ルールを持つ辞書ファイルを利用した場合、一対多の関連プロパティ名はemployeeListではなくemployeesになります。

@Entity
public class Department {
    @Id
    public Identity id;
    @OneToManay(mappedBy = "department")
    public List<Employee> employees;
}

識別子の生成方法を指定する

識別子の生成方法を指定するには、idGeneration属性に値を指定します。 idGeneration属性に"sequence"や"table"を指定してシーケンスやテーブルでの生成を選択する場合や、 "auto"を指定してシーケンスやテーブルでの生成が自動で選択される場合は、 initialValueやallocationSizeの指定も可能です。 使用するRDBMSがサポートしていない場合、"identity"や"sequence"を指定するとエラーが発生します。

たとえば、テーブルを利用した生成を行う場合、次のように指定できます。

<gen-entity
    rootPackageName="examples"
    idGeneration="table"
    initialValue="1000"
    allocationSize="10"
    classpathRef="classpath"
/>

生成されるクラスは次のようになります。

@Entity
public class Department {
    @Id
    @GeneratedValue(strategy = GenerationType.TABLE, generator = "generator")
    @TableGenerator(name = "generator", initialValue = 1000, allocationSize = 10)
    public Identity id;
    public String name;
}

独自のテンプレートファイルを使用する

任意のディレクトリに独自のテンプレートファイルを置き、templateFilePrimaryDir属性にそのディレクトリを指定することで、 独自のテンプレートファイルを使用できます。

S2JDBC-Genのテンプレートは、配布ファイルのsrc/main/resources/org/seasar/extension/jdbc/gen/internal/generator/tempaltesディレクトリ以下にあります。 エンティティクラスのテンプレートはjava/entity.ftlになります。これをコピーして、修正を加えるのが良いでしょう。

テンプレートファイルを格納するディレクトリをmytempletesとする場合、 修正した独自テンプレートを使用するにはテンプレートをmytempletes/java/entity.ftlと配置し、templateFilePrimaryDir属性にmytempletesを指定します。

<gen-entity
    rootPackageName="examples"
    templateFilePrimaryDir="mytempletes"
    classpathRef="classpath"
/>

mytempletes/my-entity.ftlのように、テンプレートファイルを任意の名前で配置したい場合は、 templateFilePrimaryDir属性に加え、entityTemplateFileName属性も指定します。

<gen-entity
    rootPackageName="examples"
    templateFilePrimaryDir="mytempletes"
    entityTemplateFileName="my-entity.ftl"
    classpathRef="classpath"
/>

生成するJavaファイルに共通のヘッダーとしてコピーライトを含める

copyright.ftlというファイルにコピーライトを記述し、これをtemplateFilePrimaryDir属性に指定するディレクトリに配置すると、 生成されるJavaファイルのヘッダーにコピーライトの記述が含まれるようになります。 mytempletes/copyright.ftlと配置する場合、タスクの定義は次のようになります。

<gen-entity
    rootPackageName="examples"
    templateFilePrimaryDir="mytempletes"
    classpathRef="classpath"
/>