当前位置: 首页 > 面试题库 >

Hibernate Criteria-如何将联接结果限制为单个实体类型?

景元忠
2023-03-14
问题内容

好了,下面的查询:

SELECT O.*, P.* FROM ORDERS O, PRODUCT P WHERE
    O.ORDER_ID=P.ORDER_ID AND P.ID=鈥�1234鈥�;

可以使用Criteria进行以下操作:

List ordersAndProducts = session.createCriteria(Order.class)
    .setFetchMode(“products”,FetchMode.JOIN)
    .add(Restrictions.eq(“id”,”1234”))
    .list(); 

但在此Criteria.list()返回List中每个元素的List<Object[]>whereObject[0]OrderandObject[1]Product

但是如何使用Criteria执行以下SQL:

SELECT O.* FROM ORDERS O, PRODUCT P WHERE 
O.ORDER_ID=P.ORDER_ID AND P.ID=’1234’;

换句话说,我想Criteria.list()给我一个List<Order>,我不在乎Products。我尝试使用createAlias()代替,setFetchMode()但结果是相同的,并且Projection不允许您指定实体,而只能指定属性。


问题答案:

您可以.setResultTransformer(CriteriaSpecification.DISTINCT_ROOT_ENTITY)根据条件使用。

List ordersAndProducts = session.createCriteria(Order.class)
.setResultTransformer(CriteriaSpecification.DISTINCT_ROOT_ENTITY)
.setFetchMode(“products”,FetchMode.JOIN)
.add(Restrictions.eq(“id”,”1234”))
.list();

现在,您检索所有急切加载的产品的订单。



 类似资料:
  • 问题内容: 以两个表为例:和。 列出产品详细信息,包括名称和ID,同时列出涉及产品的交易,包括日期,产品ID,客户等。 我需要显示一个网页,其中显示10个产品,每个产品的最近5个交易。到目前为止,如果mysql允许该部分,则似乎没有任何查询有效,并且下面的子查询也可以工作( 在“ where子句”中 出现 Unknown列“ ta.product_id”的 失败 :[ERROR:1054] )。

  • 问题内容: 这是一个简化的表结构: 一个产品可以有多张照片,每个产品的第一张产品照片(基于photo_order)是默认照片。 现在,我只需要产品详细信息页面上的所有照片,但是在列出多个产品的页面(例如产品目录页面)上,我只想显示默认照片。 因此,我要尝试的是查询产品列表,包括每个产品的默认照片。 这显然行不通,它将返回所有照片,其中每张照片都重复了产品信息: 我需要弄清楚如何做这样的事情,但是我

  • 我使用Spring数据JPA和Spring Boot应用程序。我有一个属性很少的实体类。假设我有10个属性与实体关联,我只想检索其中的几个(用户名、密码、名字、名字、电子邮件)。 因此,我编写了一个查询,只获取5个字段,但该方法不返回实体对象,而是返回一个普通对象。 如何将查询结果转换为Spring Data JPA中的实体?

  • 问题内容: 我有以下查询,该查询创建了一个视图表,该视图显示了商店中最高的销售员,其他信息很少: 上面的查询将仅显示单个商店的销售数据,其原因如上所述。我的桌子上有20家商店。如何更改上面的查询,以便为我提供20家商店的销售数据(即20行)。 问题答案: 根据上一个问题的答案,如果在同一家商店中以相同的总销售额捆绑多个员工,则将退回所有此类员工。

  • 问题内容: c_data中的每个项目都在一个类别/部分中。我想限制每个类别显示多少个项目,而不是限制检索到的项目总数。显然,如果在查询中添加“ limit 20”之类的内容,则总共只能获取20个结果,而不是每个类别20个结果。 具有类别的字段是“ sectionid”。 问题答案: MySQL没有任何排名功能,但是您可以使用变量来创建伪行号。 使用:

  • 问题内容: 我有一些SQL几乎可以完成我想做的事情。我正在使用三个表,一个用户,一个UserPhoneNumbers和一个UserPhoneNumberTypes。我正在尝试获取要导出其电话号码的用户列表。 数据库本身很旧,并且存在一些完整性问题。我的问题是,数据库中每个电话号码只能有一种类型,但事实并非如此。运行此程序时,如果每个人包含(例如)两个“家庭”数字,我都会得到多行结果。 如何修改SQ