以前のエントリで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に作成されます。