0

私は Spring Roo を初めて使用し、アプリケーションを構築しようとしています。値を文字列フィールドに選択するには、コンボ ボックスが必要です。これはかなり一般的な要件です。Spring Roo Pizza の例では、列挙されたデータ型を使用してこれを示してenum constantいますが、将来値を変更できるように、管理者がソース値を編集できるようにする必要があります (つまり、テーブル内)。さらに、メンテナンスを容易にするために、単一のテーブルを使用してこれらすべてのリストを含めることをお勧めします。

リストを生成したいSQLは次のようになります。

listvals FROM listTable WHERE listtype = “status”; を選択します。

次に、ドロップダウン ボックスには、アクティブ、非アクティブのようなものが表示されます。ユーザーがいずれかを選択すると、文字列「Active」がターゲット フィールドに格納されます。2 番目の例では、次のように使用できます。

listvals FROM listTable WHERE listtype = “State” を選択します。

2 番目のドロップダウン ボックスには、次のように表示されます: アラスカ、カリフォルニア、フロリダ。ユーザーがいずれかを選択すると、文字列「Florida」がターゲット フィールドに格納されます。

私の中心的な質問は、Roo でこの種の機能をどのように実現するかということです。

Pizza Shop クイック スタートをサンドボックスとして使用して、次のようなターゲット フィールドを定義しようとしました。

変更しました:field reference --fieldName base --type ~.domain.Base に:

field reference --fieldName base --type ~.domain.Base --referencedColumnName name

このエラーを返したもの: @JoinColumn name is required if specifying a referencedColumnName

最初の問題は、この時点で roo がまだデータベースの行 ID 列を作成していないため、ベース テーブルの結合列の名前がわからないことです。しかし、1:M 結合を使用してスクリプトを実行するまで待つと、pizza.base 列は必要な文字列ではなく整数として定義されます。

そこで、バニラ ピザ ショップの roo スクリプトを実行し、バニラ データベースに問い合わせました。(roo は、私が確認できるデータベース作成用の SQL スクリプトを生成しますか?) 結局のところ、roo は行 ID 列「id」に BigInt という名前を付けています。(また、postgresがプライマリインデックス/行IDに推奨するSEQUENCE機能を利用していないように見えることにも注意してください。)

だから今私は実行します:

field reference --fieldName base --type ~.domain.Base --referencedColumnName name --joinColumnName id

Rooはこれが好きです!Surefire レポートで判読不能なエラーが多数表示される
までは。perform tests

この問題を解決することは、上記の全体的な要件を満たすためのステップ 1 にすぎないことに注意してください。ステップ 2 では、何らかのフィルターまたは where 句を参照ステートメントに挿入しようとします。これは--fetchオプション (Roo サポート ドキュメント ( http://docs.spring.io/autorepo/docs/spring-roo/1.2.5.RELEASE/reference/html/command-index.html#command -index-finder-commands - JPA レベルでのフェッチ セマンティクス (デフォルト値なし)

しかし、私が正しい軌道に乗っているかどうかを確認したり、「フェッチセマンティクス」をモデル化したりするための例を見つけることができません。別の可能性はfield list、ドロップダウン値のリストを含むクラスを定義するために使用することです。これには同様の修飾子 --fetchがありますが、やはり例が見つかりません。

上記のコアの質問に答えていただけると助かります。

ありがとう!

4

1 に答える 1

1

Fetch パラメータは、関連付けを遅延ロードする必要があるか、積極的にフェッチする必要があるかを示します( https://docs.oracle.com/javaee/6/api/javax/persistence/ManyToOne.html#fetch() )。

テストのエラーは、存在しない関連要素を持つ要素を検索、作成、削除、または更新しようとしたことが原因である可能性があります。まずこれを確認してください。

https://github.com/DISID/gvnix-samples/blob/master/quickstart-app/quickstart.rooで、いくつかのエンティティ間の関係を含む gvNIX (Spring Roo のディストリビューション) で作成されたアプリケーションの例を見ることができます。

于 2015-09-28T14:44:19.067 に答える