1

重いHQLクエリを作成して、それを最適化しようとしています。Productすべての製品について計算されたいくつかの統計を必要とするテーブルがあり、それを呼び出すことができますstat。私はこの種のクエリを試し、すべての製品とその統計を一度に取得しようとしています(これは単純化されたクエリであり、実際のクエリははるかに複雑です)。

select new map(min(product) as prod, sum(somestat) as stat) 
from Product product
  left join product.stats somestat
group by product.id, product.name
order by product.name

ただし、この種のクエリを実行しようとすると、最初にプライマリ選択が実行され、次にX回実行SELECT product.* FROM product WHERE product.id=?されて、返されたすべての商品が選択されます。

これらのProductインスタンスを作成するために、最初のクエリの結果を取得する方法はありますか?

前もって感謝します。

4

1 に答える 1

0

製品全体が必要な場合、hibernateはすでに唯一の合理的なことを実行しています。N+1選択を実行することです。たまたま主キーでグループ化するので、理論的にはそれを想像することができますが、SQLでも、group-byで使用されていない列を選択することはできません。とにかく、そのようなカスタムトリックはHibernateなどのORMを超えています。

于 2013-01-28T15:23:33.303 に答える