0

アプリは JPA Hibernate を使用し、データベースは Sybase です。ドメインの種類ごとにいくつかの検索画面があります。query.setMaxResult(limit) は、クエリが過度に返されるのを防ぐことを理解しています。Sybase の場合、次のように翻訳されると思います。

select top n from table --n = limit

ただし、アプリのすべてのクエリがこの制限を認識するように構成できるグローバル設定はありますか?それは何ですか?どのように使用しますか?

フォローアップの質問は、1 つまたは 2 つのクエリを設定して、setMaxResults が limit+1000 になるように設定し、query.setMaxResult(limit+1000) を実行すると、グローバル設定が正しく上書きされますか?

4

1 に答える 1

3

グローバル設定はありません。そのような設定は本当に必要ありません。実際、setMaxResults()多くのクエリでは意味がありません。

特に、クエリがエンティティと少なくとも 1 つの対多関連付けを読み込む場合は、setMaxResults()使用しないでください。クエリから返されるエンティティの数ではなく、データベースから返される行の数を制限します。したがって、次の関連付けを持つエンティティ A と B があるとします。

A1 - B1
A1 - B2
A1 - B3
A2 - B4
A2 - B5
A2 - B6

そして、次のクエリを実行するイメージング: select a from A a left join fetch a.b. 最大結果を 4 に設定すると、返される行は次のようになります。

A1 - B1
A1 - B2
A1 - B3
A2 - B4

そして、すべての B を持つ A1 エンティティと、3 つすべてではなく 1 つの B だけを持つ A2 エンティティになります。

ただし、最大の結果を自動的に適用する再利用可能なクエリ テンプレートを実装することを禁止するものは何もありません。しかし、すべてのクエリにやみくもに適用するのは間違っています。

于 2012-07-26T08:08:54.667 に答える