質問

Hibernate Criteria APIを使用してサブクエリを実行しようとしていますが、それをどのように進めるかを完全に理解することができませんでした。 2つのテーブル、ショップ、従業員があると仮定すると、店にはすべてのショップ情報があり、従業員はすべてのショップのすべての雇用者の大きなテーブルです(外国の鍵はありません)。私はクエリを書き込もうとしています。クエリは、Shops TableからShop IDと住所を取得し、従業員のテーブルに参加してカウントされる店で雇用者の数を取得します。このようなもの:

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クラスショップを持っています。

私のサブクエリ:

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();

私の質問は次のとおりです。

  • カウント結果を収集するためのサブクエリとしてデタッチされたクエリを、ショップクラスのクラス変数の数字の雇用者に関連付けるにはどうすればよいですか?

ありがとう-J

役に立ちましたか?

解決

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 }
    );
ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top