Spring Roo Entity作成

 以前のエントリでProjectの作成まで書いたので、Entity作成についてのメモです。

以前のエントリはこちら
Spring Roo Install
[Spring Roo]プロジェクト作成, Logging&DB接続設定

  • roo shell上でentityコマンドを実行することでEntityが作成されます。下記はProjectというEntityを作成する例です。
roo> entity --class ~.model.Project --testAutomatically
Created SRC_MAIN_JAVA\com\example\model
Created SRC_MAIN_JAVA\com\example\model\Project.java
Created SRC_TEST_JAVA\com\example\model
Created SRC_TEST_JAVA\com\example\model\ProjectDataOnDemand.java
Created SRC_TEST_JAVA\com\example\model\ProjectIntegrationTest.java
Created SRC_MAIN_JAVA\com\example\model\Project_Roo_Configurable.aj
Created SRC_MAIN_JAVA\com\example\model\Project_Roo_Entity.aj
Created SRC_MAIN_JAVA\com\example\model\Project_Roo_ToString.aj
Created SRC_TEST_JAVA\com\example\model\ProjectDataOnDemand_Roo_Configurable.aj
Created SRC_TEST_JAVA\com\example\model\ProjectDataOnDemand_Roo_DataOnDemand.aj
Created SRC_TEST_JAVA\com\example\model\ProjectIntegrationTest_Roo_Configurable.aj
Created SRC_TEST_JAVA\com\example\model\ProjectIntegrationTest_Roo_IntegrationTest.aj
  • com.exampleパッケージの下にmodelパッケージが作成され、その下にProjectクラス(Project.java)が作成されます。そしてそれに関連するjavaクラスファイル、AspectJのファイルやテストクラスが自動生成されます。

  • 続いてEntity内の各プロパティを追加していきます。Entity作成直後はそのEntityにフォーカスがあたっていますが、他のEntityの作業をしたあとなど、対象のEntityにフォーカスがあたっていない場合は、focusコマンドで対象のEntityにフォーカスを当てます。

roo> focus --class ~.model.Project
  • チルダ(~)はベースのパッケージを表すので、ここではcom.exampleにあたります。roo shellのプロンプトが下記のようになっていればProject Entityにフォーカスがあたっています。
~.model.Project roo>
  • プロパティの追加はfieldコマンドで行います。下記は文字列型のnameというプロパティを追加する例です。
~.model.Project roo> field string --fieldName name
Updated SRC_MAIN_JAVA\com\example\model\Project.java
Created SRC_MAIN_JAVA\com\example\model\Project_Roo_JavaBean.aj
Updated SRC_TEST_JAVA\com\example\model\ProjectDataOnDemand_Roo_DataOnDemand.aj
Updated SRC_MAIN_JAVA\com\example\model\Project_Roo_ToString.aj
  • Project.javaがと関連するファイルが更新・作成されます。

  • プロパティに最大文字数やNull禁止の制約をつけたい場合には、プロパティ追加時に下記のようなオプションを追加します。

~.model.Project roo> field string --fieldName name --notNull --sizeMax 30
Updated SRC_MAIN_JAVA\com\example\model\Project.java
Updated SRC_TEST_JAVA\com\example\model\ProjectDataOnDemand_Roo_DataOnDemand.aj
Created SRC_MAIN_JAVA\com\example\model\Project_Roo_JavaBean.aj
Updated SRC_MAIN_JAVA\com\example\model\Project_Roo_ToString.aj
  • 上記の例は最大文字数は30文字でNullは禁止する例です。

  • 数値型のプロパティを追加する場合には型としてnumberを指定し、--typeオプションでJavaのクラスを指定します。

~.model.Project roo> field number --fieldName cnt --type java.lang.Integer
  • 日付型の場合もJavaのクラス名をあわせて指定します。
~.model.Project roo> field date --fieldName createdTime --type java.util.Date
  • 他のクラスへの関連をプロパティとして持つには、fieldコマンドの型の指定でsetを指定し、--typeで対象のクラス、--cardinalityオプションで関連の持ち方、--mappedByオプションでもう一方のEntityからこのEntityを参照するためのフィールド名を指定します。下記はProject EntityがSubProject Entityへの関連を一対多で持つ例です。SubProject Entityからはprojectというフィールド名でProject Entityを参照します。
~.model.Project roo> field set --fieldName subProjects --type ~.model.SubProject --cardinality ONE_TO_MANY --mappedBy project
  • 関連が多対一の場合には上記コマンドの--cardinalityをMANY_TO_ONEに、多対多の場合にはMANY_TO_MANYに変更します。

  • ここまでを必要なEntityとプロパティに対して実行すれば、アプリケーションの起動時に対応するテーブルがDBに作成されます。