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