0

私はかなり長い間 Spring Roo を使用してきました。平凡なプログラミングが不要になり、アプリのロジックに集中できる点がとても気に入っています。しかし、私は最近、JPA アノテーションを更新し、属性名を削除し続けるため、ランタイムと戦っていることに気付きました。

派生値 (ユーザーの現在の場所から会場までの距離) を計算し、それを JPA レコード オブジェクトに格納しようとするストアド プロシージャを呼び出しています。この質問SqlResultSetMapping columns as and entitiesで説明されているように、コードを正常に機能させることができました

Spring Roo シェルを無効にしてから、プロジェクトを再コンパイルする前にアノテーションを手動で更新することで、なんとかこれを行うことができました。

ただし、Roo シェルを実行する Spring ソース ツール スイートでこのロジックを記述している場合、Roo ランタイムは常に次のアノテーションを更新します。

@SqlResultSetMapping(name = "findVenuesByDistanceMapping"、エンティティ = { @javax.persistence.EntityResult(entityClass=model.VenueRecord.class) }、列 = { @javax.persistence.ColumnResult(name="distance") })

これに:

@SqlResultSetMapping(name = "findVenuesByDistanceMapping"、エンティティ = { @javax.persistence.EntityResult(model.VenueRecord.class) }、列 = { @javax.persistence.ColumnResult("distance")})

注釈属性識別子が削除されていることがわかります。次に、クラスをコンパイルしようとすると、例外が発生します。Spring Roo から完全に離れない限り、これを回避する方法はないようです。私は何ヶ月もそれを使用しており、回避できない問題を最近発見したばかりなので、これは残念です.

この問題を回避する方法について何か提案はありますか? おそらく、Spring Roo のコードを変更して、正しい形式の注釈を認識できるようにすることはできますか?

4

1 に答える 1

0

Roo が生成したコードを Java クラスにプッシュインするだけです。次の 2 つの方法でアーカイブできます。

  1. STS の「AspectJ refactoring /Push in...」コンテキスト メニュー オプションの使用 ( .ajファイルのメソッド/宣言の選択)
  2. コードを.javaファイルに移動します (そしてクラス名のプレフィックスを削除します)。

その後、Roo は de .java内のメソッド/宣言を検出し、それを再度生成しません。

いずれにせよ、Roo が生成したコードに問題が見つかった場合は、Roo Jiraで報告できるので、次のリリースで修正できます。

幸運を!

于 2014-11-10T14:05:00.753 に答える