我正在尝试在我的 Hibernate 查询中使用子查询功能,但我是个白痴 :) 我的数据库表的结构是:
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) );
我要做的是获取标准,其中包含具有指定类型的文章。我的想法是按类型过滤文章,然后按其标准 ID 对它们进行分组,然后通过其 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();