tanamonの稀に良く書く日記

KEEP CALM AND DRINK BEER

Spring Rooの動作(3) - entityコマンド

Spring Roo 1.1.0.M1 [rev 3a0b8a3]で試した結果です

entityコマンド

  • JPAの永続性エンティティクラスを作成する
  • 作成済みエンティティクラスに対しては実行できない
  • 作成済みクラスを変更したい場合は、直接変更する

オプション

--class [className]
  • 作成したいエンティティのクラス名を指定する
  • いくつかの名前は予約語になっていて使えないものがある
  • 予約語を無理矢理使いたい場合は--permitReservedWordsオプションを指定する
--table [tableName]
  • データベースのテーブル名を[tableName]としてエンティティクラスを作成する
  • テーブル名とクラス名を分けたい場合に指定する
  • 運用中のテーブルが残念な名前であっても、ソースを残念にしなくて済む
--permitReservedWords
  • このオプションを指定すると、エンティティ名に予約語を使えるようになる
  • 予約語が何であるかは記述がないっぽいが、TestEntityという名前では作成できない
roo> entity --class ~.domain.TestEntity
Entity name rejected as conflicts with test execution defaults; please remove 'Test' and/or 'TestCase'
--testAutomatically
  • UnitTestのひな形を作成してくれる
  • 後からtest integrationコマンドを実行したのと同じ効果
--identifierType [typeName]
--identifierColumn [columnName]
--identifierField [fieldName]
  • 一意キーに使用するカラムを指定する
  • 何も指定しないと、[columnName]と[fieldName]がid、[typeNmae]がjava.lang.Longで作成される
  • 複合キーなどはできないみたい?
--abstract
  • エンティティクラスをabstractとして作成する
--extends [extendsClassName]
  • [extendsClassName]を親クラスとして指定する
  • プロジェクト内のクラスしか指定できないみたい
roo> entity --class MyDate --extends java.util.Date
Unable to locate requested type'java.util.Date'
--serializable
--inheritanceType [typeName]
  • @Inheritanceアノテーションが付く
  • [typeName]にはJOINED, SINGLE_TABLE, TABLE_PER_CLASSのいずれかを指定する
  • あとでkwsk
--mappedSuperclass

使い方

ふつうに

roo> entity --class ~.domain.SandboxEntity --testAutomatically
Created SRC_MAIN_JAVA\com\example\roo\sandbox\domain\SandboxEntity.java
Created SRC_TEST_JAVA\com\example\roo\sandbox\domain\SandboxEntityDataOnDemand.java
Created SRC_TEST_JAVA\com\example\roo\sandbox\domain\SandboxEntityIntegrationTest.java
Created SRC_MAIN_JAVA\com\example\roo\sandbox\domain\SandboxEntity_Roo_Entity.aj
Created SRC_MAIN_JAVA\com\example\roo\sandbox\domain\SandboxEntity_Roo_ToString.aj
Created SRC_MAIN_JAVA\com\example\roo\sandbox\domain\SandboxEntity_Roo_Configurable.aj
Created SRC_TEST_JAVA\com\example\roo\sandbox\domain\SandboxEntityIntegrationTest_Roo_Configurable.aj
Created SRC_TEST_JAVA\com\example\roo\sandbox\domain\SandboxEntityDataOnDemand_Roo_DataOnDemand.aj
Created SRC_TEST_JAVA\com\example\roo\sandbox\domain\SandboxEntityIntegrationTest_Roo_IntegrationTest.aj
Created SRC_TEST_JAVA\com\example\roo\sandbox\domain\SandboxEntityDataOnDemand_Roo_Configurable.aj

テーブルオプション付きで

roo> entity --class ~.domain.TableOptionEntity --table options --identifierField seqence --identifierColumn seq --ide
ntifierType java.lang.Integer
Created SRC_MAIN_JAVA\com\example\roo\sandbox\domain\TableOptionEntity.java
Created SRC_MAIN_JAVA\com\example\roo\sandbox\domain\TableOptionEntity_Roo_Entity.aj
Created SRC_MAIN_JAVA\com\example\roo\sandbox\domain\TableOptionEntity_Roo_ToString.aj
Created SRC_MAIN_JAVA\com\example\roo\sandbox\domain\TableOptionEntity_Roo_Configurable.aj

その他

エンティティクラスの削除
  • .javaファイルを消すと、rooが起動中ならほぼ即時に、起動中でなければ次の起動時に勝手に削除される
  • rooコマンドには無いっぽい
    • エンティティを作成
~.domain.SimpleEntity roo> entity --class ~.domain.DeleteEntity
Created SRC_MAIN_JAVA\com\example\roo\sandbox\domain\DeleteEntity.java
Created SRC_MAIN_JAVA\com\example\roo\sandbox\domain\DeleteEntity_Roo_Entity.aj
Created SRC_MAIN_JAVA\com\example\roo\sandbox\domain\DeleteEntity_Roo_ToString.aj
Created SRC_MAIN_JAVA\com\example\roo\sandbox\domain\DeleteEntity_Roo_Configurable.aj
    • SRC_MAIN_JAVA\com\example\roo\sandbox\domain\DeleteEntity.javaを手動で削除する
    • rooコンソールに以下のように出力され、関連ファイルが削除される
[Timer-0] Deleted SRC_MAIN_JAVA\com\example\roo\sandbox\domain\DeleteEntity_Roo_ToString.aj
[Timer-0] Deleted SRC_MAIN_JAVA\com\example\roo\sandbox\domain\DeleteEntity_Roo_Entity.aj
[Timer-0] Deleted SRC_MAIN_JAVA\com\example\roo\sandbox\domain\DeleteEntity_Roo_Configurable.aj
エンティティクラスのリネーム
  • rooコマンドには無いっぽい
    • エンティティを作成
roo> entity --class ~.domain.RenameEntity
Created SRC_MAIN_JAVA\com\example\roo\sandbox\domain\RenameEntity.java
Created SRC_MAIN_JAVA\com\example\roo\sandbox\domain\RenameEntity_Roo_Entity.aj
Created SRC_MAIN_JAVA\com\example\roo\sandbox\domain\RenameEntity_Roo_ToString.aj
Created SRC_MAIN_JAVA\com\example\roo\sandbox\domain\RenameEntity_Roo_Configurable.aj
    • エクスプローラ上でRenameEntity.javaをリネームすると、旧名称の関連するAspectJファイルが削除されるが、新しいものは作成されない
[Timer-0] Deleted SRC_MAIN_JAVA\com\example\roo\sandbox\domain\RenameEntity_Roo_ToString.aj
[Timer-0] Deleted SRC_MAIN_JAVA\com\example\roo\sandbox\domain\RenameEntity_Roo_Entity.aj
[Timer-0] Deleted SRC_MAIN_JAVA\com\example\roo\sandbox\domain\RenameEntity_Roo_Configurable.aj
    • EclipseにSpring IDEを入れた上でリファクタリングでのリネームを行うと、古いファイルの削除と同時に新しい関連ファイルが作成される
[Timer-0] Created SRC_MAIN_JAVA\com\example\roo\sandbox\domain\RenameAfterEntity_Roo_Entity.aj
[Timer-0] Created SRC_MAIN_JAVA\com\example\roo\sandbox\domain\RenameAfterEntity_Roo_ToString.aj
[Timer-0] Created SRC_MAIN_JAVA\com\example\roo\sandbox\domain\RenameAfterEntity_Roo_Configurable.aj
[Timer-0] Deleted SRC_MAIN_JAVA\com\example\roo\sandbox\domain\RenameEntity_Roo_ToString.aj
[Timer-0] Deleted SRC_MAIN_JAVA\com\example\roo\sandbox\domain\RenameEntity_Roo_Entity.aj
[Timer-0] Deleted SRC_MAIN_JAVA\com\example\roo\sandbox\domain\RenameEntity_Roo_Configurable.aj