我正在使用查询DSL的Spring数据JPA,并试图在条件中使用求和函数,因为我正在使用分页,所以我必须首先获得计数。所以我有如下的Java代码:-
NumberPath<Double> path = entityPath.getNumber("qty", Double.class);
BooleanExpression exp = path.sum().loe(120);
JPQLQuery countQuery = from(stock).where(exp);
long count = countQuery.count();
它创建这样的查询:-
select count(stock0_.stock_id) as col_0_0_ from stock stock0_
where sum(stock0_.qty)>=120;
我得到错误代码:1111。组函数的使用无效
。
上述查询在SQL
中也不起作用,因为sum函数不能与count-in-where条件一起使用。当我必须先进行计数,然后再获取真实数据时,我不知道如何处理这样的问题。有人能帮我解决这个问题的JPA
方法吗。
请不要建议@Query
注释,因为我不能使用它。由于动态过滤要求。
您正在使用聚合函数(sum)。那么您需要使用()代替where()
这个例子非常大。您只需要关心分页和具有元素。
如果您有不同的谓词和页面请求对象。
页面请求示例:
pageRequest = new PageRequest(
MI_PAGE,
LIMIT,
Sort.Direction.valueOf( ASC ),
ORDER_FIELD);
EntityQ表示QueryDSL生成的元实体。
查询示例:
new JPAQuery(em).from(entityQ).where( entityQ.id.in(
new JPASubQuery()
.from(entity2Q).innerJoin(entity2Q.objEntityQ, entityQ)
.where(ENTITY, PREDICATE)
.groupBy(entity2Q.objEntityQ.id)
.having( Wildcard.count.goe(SIZE) )
.list(entity2Q.objEntityQ.id)
))
.offset(pageRequest.getOffset() )
.limit( pageRequest.getPageSize() )
.orderBy(ORDERS).list(entityQ);
编辑2更具体地为您的示例:
我通常在我的自定义存储库中有一个持久性上下文:
@PersistenceContext
EntityManager em
然后,您可以创建一个简单的JPAQuery:
new JPAQuery(em)
.from(YOUR_STOCK_QUERYDSL_ENTITY)
.groupBy(YOUR_STOCK_QUERYDSL_ENTITY.field_to_sum)
.having(YOUR_STOCK_QUERYDSL_ENTITY.field_to_sum.sum().as("alias")
.goe(100));
如何使用规范编写下面查询 当我们使用Specification时,即使在multiselect中提到了count(),也没有选择count()。 为什么JPA中的multiselect方法不起作用
问题内容: 我使用Vlad Mihalcea的库来将SQL数组(在我的情况下为Postgresql)映射到JPA。然后,假设我有一个实体,例如。 适当的SQL是: 使用QueryDSL,我想获取包含所有给定标签的行。原始SQL可能是: (摘自:https : //www.postgresql.org/docs/9.1/static/functions- array.html ) 可以用QueryD
我目前正在从事一个项目,在该项目中,我给出了一个实体,该实体具有一个集合,即订单,因此客户和订单之间存在一种单一关系。假设我想选择具有相应数量的订单实体(在SQL中称为计数)的客户集合的子集:Spring Data JPA提供的查询方法是否已经有了默认实现,以避免使用JPQL编写自定义查询,该查询在一个SQL查询中而不是在n 1个查询中获取客户订单的数量其中n是客户数量?或者可以在某种瞬态字段(例
问题内容: 我正在尝试对某些条件过滤后的值进行汇总。我正在使用spring数据的ElasticSearchTemplate.query()方法也执行查询并在结果提取器中获取结果。我正确地找到了匹配(即应用了过滤器,并且仅检索了与这些值匹配的文档。)。但是,汇总是在所有文档上执行的。我认为汇总应仅应用于过滤后的值。以下是我正在使用的代码: 为了进一步调试问题,我编写了代码来执行查询,而不是使用spr
我使用本教程使用REST访问JPA数据,创建了一个简单的RESTful Web服务,用于访问数据库中的一些数据。它工作得很好。我喜欢它有多简单,我或多或少了解它的工作原理。 但是,有人要求我添加一些自定义日志记录。每当Web服务被调用日志时,都会生成“Start-time”,并在服务返回之前生成另一个日志“End-time”。有没有办法在不破坏我的包含@Query anotation的方法的情况下
我在应用程序中使用Querydsl来大大改进查询数据库的代码。但是,我有一个来自外部服务的JPA谓词(javax.persistence.criteria.Predicate)。我想混合使用Querydsl和外部谓词创建的查询。例如: 另一个解决方案是将Querydsl谓词转换为JPA谓词: 有可能吗?如果是,我如何做到这一点?如果没有,是否有其他混合谓词的解决方案(比如将两者转换为SQL字符串并