1

Hibernateクエリでサブクエリ関数を使用しようとしていますが、私はばかです:) DBテーブルの構造は次のとおりです。

CREATE TABLE standard (
  id VARCHAR(12) NOT NULL ,
  title VARCHAR(99) NOT NULL ,
  description VARCHAR(999) NOT NULL ,
  revision VARCHAR(99) NOT NULL ,
  annotation TEXT NULL ,
  PRIMARY KEY (id) );

CREATE TABLE article (
  id VARCHAR(12) NOT NULL ,
  type INT(2) NOT NULL ,
  classTitle VARCHAR(99) NULL ,
  classDescription VARCHAR(999) NULL ,
  standard_id VARCHAR(12) NULL ,
  pubdate DATETIME NOT NULL ,
  title VARCHAR(99) NULL ,
  thumbnail TEXT NULL ,
  text TEXT NULL ,  
  PRIMARY KEY (id) );

私がやろうとしていることは、指定されたタイプの記事を含む標準を取得することです。私の考えでは、記事をそのタイプでフィルタリングし、次に standardId でグループ化し、id から標準を取得するというものでした。

このようなもの :)

DetachedCriteria subquery = DetachedCriteria.forClass(Article.class)
                             .add(Restrictions.eq("type", Constants.ARTICLE_TYPE_INTERPRETATION))
                              .setProjection(Projections.groupProperty("standardId"));

List<Standard> stds = (List<Standard>) session.createCriteria(Standard.class)
            .add(Restrictions.idEq(Subqueries.exists(subquery))).list();

しかし、このクエリは、サブクエリが必要な標準のみを返すという事実にもかかわらず、データベース内のすべての標準を提供します。問題がどこにあるかはわかっています。subqery によって返された ID で標準をフィルター処理する制限を記述できません。

誰かが私にそれを行う方法のヒントを教えてもらえますか?

どうもありがとう !

オンドレイ

編集: @Rahul Agrawalに感謝

List<Standard> stds = (List<Standard>) session.createCriteria(Standard.class)
            .add(Subqueries.propertyIn("id", subquery)).list();
4

2 に答える 2

0

私はあなたがこれを探していると思います..

List<Standard> stds = (List<Standard>) session.createCriteria(Standard.class)
            .setResultTransformer(Criteria.DISTINCT_ROOT_ENTITY)
            .add(Restrictions.idEq(Subqueries.exists(subquery))).list();
于 2012-08-09T09:17:42.997 に答える