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

带subselect的JPA查询

段干博明
2023-03-14

我想表达以下疑问

select * from(
            select pI, max(pAs) as pAs from mytable
            and pAs>=?1 and pAs<=?2
            and pI like 'DE%%'
            and pE like ?6
            group by pI
            ) as x
            inner join mytable as a
            on a.pI=x.pI
            and a.pAs=x.pAs

使用hibernate中的criteriabuilder。我没有成功,目前使用的是nativeQuery。

然而,问题的症结(我无法解决)似乎是我需要在子选择中返回两个属性。我找到的所有示例只返回一个属性。

这真的是jpa/hibernate的限制还是有办法做我想做的?任何帮助/指针都很感激。

共有1个答案

公西宏毅
2023-03-14

您没有提供有关您的实体的任何信息。所以我怀疑您有Mytable实体类,它有LongfieldpAs

CriteriaBuilder builder = entityManager.getCriteriaBuilder();
CriteriaQuery<Mytable> query = builder.createQuery(Mytable.class);
Root<Mytable> root = query.from(Mytable.class);

Subquery<Long> subquery = query.subquery(Long.class); // max(pAs)
Root<Mytable> subRoot = subquery.from(Mytable.class);

Predicate predicate1 = 
         builder.equal(root.get("pI"), subRoot.get("pI"));

Predicate predicate2 = 
         builder.greaterThan(subRoot.get("pAs"), 0);

Predicate predicate3 = 
         builder.lessThan(subRoot.get("pAs"), 100);

//There is a simple example. But you can add as many predicates as you need
Predicate fullPredicate = 
         builder.and(predicate1, predicate2, predicate3);

Predicate havingPredicate = 
         builder.equal(root.get("pAs"), builder.max(subRoot.get("pAs")));

subquery.select(builder.max(subRoot.get("pAs"))).where(fullPredicate)
    .groupBy(subRoot.get("pI")).having(havingPredicate);

query.select(root).where(builder.exists(subquery));

List<Mytable> result = entityManager.createQuery(query).getResultList();
 类似资料:
  • 我通过提示检查了它在EclipseLink中的工作情况: 这个链接http://blog.ringerc.id.au/2012/06/jpa2-is-very-inflexible-with-eagerlazy.html暗示通过Hibernate是不可能的,建议手动获取。但是,我无法理解如何通过HQL或标准来实现它,特别是如何获得不在实体上但仅存在于数据库上的child.parent_id列。即避

  • 此查询用于检索一对多关系中的最后记录(请参阅SQL连接:选择一对多关系中的最后记录) 我的问题是:如何使用jpa criteria api使用subselect构建这个连接?可能吗?如果没有,可以使用jpql吗? 到目前为止我的代码:

  • 因此,我希望从一个JPA查询返回多个对象,该查询还允许分页,这样我只能返回它返回的前10个对象。 JPA:返回多个实体的查询 在属性=值的表blah中作为select blah_0.id,blah_0.peropty进入,但随后转换为select*from(select blah_0.id,blah_0.peropty from表blah中属性=值),其中rownum>=10 也许创造一种新的方言

  • 我正在使用JPA投影,但当我的查询包含子查询时,它就失败了。例如: 下面是投影的界面: 和存储库: 关于如何使用JPA投影的子查询有什么想法吗? 谢谢。

  • 我们有一个实体树,由一个父实体组成,该父实体与一个子实体具有多对多关系,如下所述(在kotlin中)。为什么hibernate似乎忽略了与实体关系关联的FetchMode? 观察到的行为:在父级FetchMode的JpaRepository上执行findAll时。忽略SUBSELECT,Hibernate为每个父级触发一个新的选择来获取子级。 预期行为:在父节点的JpaRepository上执行f

  • 问题内容: 我正在使用Spring JPA,我需要一个本机查询。通过该查询,我只需要从表中获取两个字段,因此我尝试使用Projections。它不起作用,这是我得到的错误: 我试图严格按照所链接页面的说明进行操作,试图使查询为非本地查询(如果我使用投影,我是否真的需要将查询设为本地查询,顺便说一句?),但我总是会遇到该错误。 如果使用接口,则可以,但是结果是代理,因此我真的需要它们成为“正常结果”