14

JPAで名前付きクエリを作成する場合、これらのクエリの名前(たとえば、など)について受け入れられているベストプラクティスがあります。EntityName.allActiveまたfindAllActiveFoos、これらの名前付きクエリを、クエリするエンティティクラスで宣言するか、ユーティリティクラスでまとめて宣言することをお勧めします。 ?

4

2 に答える 2

12

いいえ、複雑なケースをカバーする広く受け入れられているベスト プラクティスはありません。また、一般的に、JPA で使用できるスタイル ガイドはあまり多くありません。一般的に受け入れられており、本でも一般的に使用されているように見えるのは、エンティティの名前でクエリを開始することです。

操作と引数を組み合わせた EntityName (永続化ユニットで一意の名前を保証するため) を使用します。

  • Person.findByAge
  • Person.findByAgeAndFirstName
  • Person.removeByFirstName
  • Person.updateSalaryIfYearBornBefore

注意として、仕様では例ではwith代わりに使用byし、エンティティの名前でクエリの前に付けません。しかし、それはもちろん仕様であり、スタイル ガイドではありません。

これらのクエリ名の定数を宣言し、これらの定数を @NamedQuery.name と em.createNamedQuery の両方で使用するとよいと思います。

@NamedQuery、@NamedNativeQuery、および @NamedQueries は、マップされたスーパークラスまたはエンティティにのみ適用できるため、それらをユーティリティ クラスに配置することはできません。

于 2012-06-07T18:25:46.243 に答える
5

世界的に受け入れられているベスト プラクティスはないようですが、Mike Keith と Merrick Shincariol による本「Pro JPA 2」は、Mikko が言ったことを正確に推奨しています。 "。

これらをどこで宣言するかについては、ここでも、私が見ることができる実際のベスト プラクティスはありません。それらは、1 つの大きなクラス (すべてのエンティティが拡張されるベース MappedSuperclass など) ですべてを宣言するよりも、エンティティ自体で宣言することを好む傾向があるようです。もう 1 つのオプションは、別の XML ファイルでそれらを宣言することですが、私はそれをお勧めしません。個人的には、関連するエンティティで宣言するアプローチが好きです。また、名前に定数を使用するという Miko の提案にも同意します。これらの定数をすべて別のクラスで定義することもできます。

于 2012-06-08T09:23:01.520 に答える