2

Hibernate 基準 API を使用してサブクエリを実行しようとしていますが、その方法を完全に理解することができませんでした。SHOPS と EMPLOYEES の 2 つのテーブルがあり、SHOPS にはすべての店舗情報があり、EMPLOYEES はすべての店舗のすべての従業員の大きなテーブルであると仮定します (外部キーは設定されていません)。SHOPS テーブルから店舗 ID と住所を取得し、結合によって店舗の従業員数を取得し、EMPLOYEES テーブルをカウントするクエリを作成しようとしています。このようなもの:

SELECT a.SHOP_ID, a.SHOP_ADDRESS, (SELECT COUNT(*) FROM
SHOP_EMPLOYEES b WHERE b.SHOP_ID = a.SHOP_ID) as NUM_EMPLOYEES FROM   <--Problem here
SHOPS a
WHERE
QUERY_STATUS ='Open'

したがって、従業員用に shopId、shopAddres、numEmployees などの Java クラス Shop があります。

私のサブクエリ:

DetachedCriteria subquery = DetachedCriteria.forClass(
  Employee.class, "b").add(
  Property.forName("b.shopId").eqProperty("a.shopId"))
  .setProjection(
    Projections.projectionList().add(
      Projections.rowCount()));

そして、次の行の主な基準クエリ:

List shopListRet = session.createCriteria(Shop.class, "a")
  .setProjection(
    Projections.projectionList().add(
      Projections.property("a.shopId"))).add(Subquery..."DONT KNOW WHAT SHOULD COME HERE").list();

私の質問は:

  • Detached クエリをサブクエリとして関連付けて、カウント結果を Shop クラスのクラス変数 numEmployees に収集するにはどうすればよいですか?

ありがとう -J

4

1 に答える 1

4

SQL プロジェクションを使用してサブクエリを追加します。

  String subSql = "SELECT COUNT(*) FROM SHOP_EMPLOYEES b WHERE b.SHOP_ID = a.SHOP_ID"
...
    .add( Projections.sqlProjection(
        subSql ,
        new String[] { "NUM_EMPLOYEES" },
        new Type[] { Hibernate.LONG }
    );
于 2011-01-13T20:07:53.663 に答える