クエリビーン

クエリビーンはオプションですが、型安全のコンパイル時チェックを使用してクエリを記述するための優れた方法を提供します。プロパティとエクスプレッションでIDE 自動補完を使用すると、使いやすく学習することもできます。

クエリビーンは、Java アノテーション処理 (APT) または Kotlin アノテーション処理 (KAPT) を使用して生成されます。

エンティティごとに、同じ名前のクエリビーンが生成されますが、プレフィックスとしてQが追加されます。したがって、Customer というエンティティビーンがある場合、QCustomer というクエリビーンが生成されます。

エンティティビーンモデルが変化すると、クエリビーンが再生成され、開発者はアプリケーションクエリに対してコンパイル時チェックを取得できます。クエリがモデルに対して有効でなくなった場合はコンパイル時エラーが発生します。

Contact contact =
  new QContact()                                // Contact query bean
    .email.equalTo("rob@foo.com")               // type safe expression
    .findOne();                                 // with IDE auto-completion
List<Customer> customers =
  new QCustomer()                                // Customer query bean
    .status.equalTo(Status.NEW)
    .billingAddress.city.equalTo("Auckland")     // joins automatically added
    .contacts.isEmpty()                          // to support expressions
    .findList();

APT / KAPT (クエリビーンの生成)

Java クエリビーンを生成するには、io.ebean:querybean-generator Java アノテーションプロセッサを使用し、Kotlin クエリビーンを生成するには、io.ebean:kotlin-querybean-generator を使用します。

Maven による生成

maven を使用してクエリビーンを生成する方法の詳細については、docs / getting-started / maven を参照してください。

Gradle による生成

gradle を使用してクエリビーンを生成する方法の詳細については、docs / getting-started / gradle を参照してください。

拡張機能

バージョン 12.1.8 より前は、src/main/resources/ebean.mf マニフェストファイルを編集して、クエリビーンで拡張する必要があるパッケージのquerybean-packages を指定する必要があることに注意してください。12.1.8 以降はこれが不要になりました。

例 (12.1.8 より前)
entity-packages: org.example.domain
transactional-packages: org.example
querybean-packages: org.example

但し書き - リファクタリングのリネーム

エンティティビーンのリファクタリングのリネーム

IDE でエンティティ Bean の名前を変更してリファクタリングする場合は、クエリ Bean で すべてビルド をトリガーする必要があります。これは古い Bean 名に対するクエリ Bean が次の すべてビルド まで保持されるためです。

すべてビルド を実行すると、古いクエリ Bean は効果的に削除され新しい Bean が生成されます。この時点で、調整が必要なクエリ(新しいクエリ Bean 名を使用)に対してコンパイラ エラーが発生します。

Groovy Spock

Groovy で(おそらく Spock テストで)クエリ Bean を使用する場合、@CompileStatic ブロックの中でそれらを使用する必要があります。

@CompileStatic
static def findCount(String name) {
  return new QDbSample().name.eq(name).findCount()
}

そうすれば、次のように Spock テストでヘルパー メソッドを使用できます

...
then:
  // this line NPEs
  findCount('fred') == 1