gpt4 book ai didi

java - Hibernate中的子查询函数

转载 作者:行者123 更新时间:2023-12-01 15:14:07 25 4
gpt4 key购买 nike

我正在尝试在 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) );

我要做的是获得标准,其中包含指定类型的文章。我的想法是,我按类型过滤文章,然后按其 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();

最佳答案

添加 IN 条件。要添加“子查询中的 where 字段”,需要两个单独的条件。一个用于主(根)实体,另一个用于检索 IN 列表的值。以下检索其订单项目的订单,该订单项目的产品库存水平为零。结果转换器用于仅检索每个实体的一行,而不是通过一对多关系的联接获得多行。?

DetachedCriteria ids = DetachedCriteria.forClass(ProductStock.class, "stock");
ids.add(Restrictions.eq("stock.stockLevel", 0));
ids.setProjection(Property.forName("productId"));

DetachedCriteria criteria = DetachedCriteria.forClass(Order.class, "order");
criteria.createAlias("order.orderItems", "items", CriteriaSpecification.LEFT_JOIN);
criteria.add(Subqueries.propertyIn("items.productId", ids));
criteria.setResultTransformer(Criteria.ROOT_ENTITY);

更多详情请参阅:http://devgrok.blogspot.in/2008/11/hibernates-criteria-api.html

关于java - Hibernate中的子查询函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11880132/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com