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

标签 java sql hibernate criteria

好的,下面的查询:

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<Object[]>其中 Object[0]是一个 OrderObject[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()但结果是一样的,投影不允许您指定实体,只能指定属性。

最佳答案

您可以在条件上使用 .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();

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

关于java - Hibernate Criteria - 如何将连接结果限制为单个实体类型?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4377249/

相关文章:

javascript - 如何用javascript锚定?

java - 如何构建 WADL 文件以获得以下 Java 接口(interface)

sql - 奇怪的 SQL 行为,为什么这个查询什么都不返回?

java - 如何正确建模复杂的层次结构并与 hibernate 交互

java - Hibernate HQL 查询子选择或联接

java - 单击 JavaFX ListView 中的任意位置将返回索引 -1 并崩溃

java - 使用 Wildfly 11 复制 infinispan 缓存

mysql - 在sql中跨多个列插入单个值

sql - 有哪些策略可用于将 Access 数据库迁移到基于 SQL 服务器的应用程序?

java - 如何在 angularjs 中使用 $resource 来使用 Spring Restful Web 服务