当前位置: 首页 > 知识库问答 >
问题:

用条件获取联接路径中的字段

丌官凯康
2023-03-14

我想知道有没有办法在hibernate中使用criteriaBuilder来做这样的事情

select users.first_name,orders.payable,order_item.product_title
from "order" orders
         join users on orders.user_id_fk = users.id_pk
         join order_item on orders.id_pk = order_id_fk

如果我必须使用group by,我需要这个。我搜索和谷歌,也阅读了这篇文章,但不知道如何在Hibernate中做到这一点:

另外,我为选择第一层中的字段编写了代码,它完美地用于选择第一层,但它需要一些更改来处理连接和从根以外的其他表中选择字段:

<R> List<R> reportEntityGroupBy(List<String> groupBy, List<String> selects, Class<T> root, Class<R> output) {
    CriteriaBuilder criteriaBuilder = getEntityManager().getCriteriaBuilder();
    CriteriaQuery<R> criteriaQuery = criteriaBuilder.createQuery(output);
    Root<T> rootQuery = criteriaQuery.from(root);

    if (selects == null || selects.isEmpty()) {
        selects = groupBy;
    }
    criteriaQuery.multiselect(selects.stream().map(rootQuery::get).collect(Collectors.toList()));
    criteriaQuery.groupBy(groupBy.stream().map(rootQuery::get).collect(Collectors.toList()));

我使用Hibernate 5.4.22.final并使用entityGraph进行联接。

共有1个答案

顾宏朗
2023-03-14

我不知道您的选择是什么样子,但我想您使用的是路径,即由.分隔的属性。在这种情况下,您必须拆分路径,并为每个属性名调用path#get

List<Path> paths = selects.stream()
  .map(select -> {
    Path<?> path = rootQuery;
    for (String part : select.split("\\.")) {
      path = path.get(part);
    }
    return path;
  })
  .collect(Collectors.toList()));
criteriaQuery.multiselect(paths);
criteriaQuery.groupBy(paths);
 类似资料:
  • 问题内容: 使用JPA 2 Criteria Join方法,我可以执行以下操作: 我该如何使用fetch方法做同样的事情,我希望Fetch接口具有用于路径导航的get方法,但它不会: 根据Hiberante文档,获取将返回错误的Join对象。 http://docs.jboss.org/hibernate/stable/entitymanager/reference/en/html/querycr

  • 嗨,伙计们,我正在使用Laravel5.5,我有两个表,用户和服务 用户表 ID 名称 电子邮件 密码 地址 城市 国家 邮政编码 null 提前谢了。热烈问候:阿卜杜拉·沙希德。

  • 本文向大家介绍获取Java中文件的绝对路径,包括了获取Java中文件的绝对路径的使用技巧和注意事项,需要的朋友参考一下 方法java.io.File.getAbsolutePath()用于获取字符串形式的文件的绝对路径。此方法不需要任何参数。 演示此的程序如下所示- 示例 上面程序的输出如下- 输出结果 现在让我们了解上面的程序。 使用方法java.io.File.getAbsolutePath(

  • 问题内容: 相等的: 左联接: 相等的: 正确加入 相等的: 当我们在“ WHERE”子句中指定联接条件与“ ON联接条件”时有什么区别? 通过在“ ON”子句和“ WHERE”子句中指定联接条件,我们在内部,左外部,右外部联接中是否获得相同的结果。请指教。 问题答案: 好吧,您所谓的“等效”并不等同于外部联接。让我们以左联接为例。 加入条件: 与哪里: 将条件放到WHERE子句中可以有效地使联接

  • V1.1.1新增 sp_asset_relative_url($asset_url) 功能: 获取文件相对路径 参数: $asset_url:文件URL 返回 类型字符串,带协议的绝对地址直接返回原来的值,否则会转化为相对于系统upload 目录的文件路径 实例 <?php $file='/data/upload/1.png';//文件路径 $path=sp_asset_relative_url

  • 问题内容: 如果我有一个打开的文件,是否有调用以字符串的形式获取完整路径? 从,我将如何获得? 问题答案: 此处的键是代表打开文件的对象的属性。你得到这样的: 有帮助吗?