Java Spring数据JPA规范-联接中的不同+按列排序

Java Spring数据JPA规范-联接中的不同+按列排序,java,spring,hibernate,spring-data-jpa,criteria-api,Java,Spring,Hibernate,Spring Data Jpa,Criteria Api,我有一些我正在结合的规范,并且: Specification.where(predicate1).and(predicate2).and(predicate3); 其中一个具有不同的集合: query.distinct(true); 另一个对联接中的列进行排序 query.orderBy(builder.desc(bJoin.get("orderbyColumn"))); 这会失败,因为SQLGrammarException声明order by列应为distinct 所

我有一些我正在结合的规范,并且:

Specification.where(predicate1).and(predicate2).and(predicate3);
其中一个具有不同的集合:

query.distinct(true);
另一个对联接中的列进行排序

query.orderBy(builder.desc(bJoin.get("orderbyColumn")));
这会失败,因为SQLGrammarException声明order by列应为distinct

所以基本上我们有实体A,主实体,和一些嵌套实体B,我们从A中选择,但要按B排序,在生成的sql中,它只从A中选择列。我发现的唯一方法是让它工作=也从B中选择,就是用取数替换连接:

Fetch < A, B > bFetch = root.fetch("joinCol", JoinType.INNER);
Join < A, B > bJoin = (Join < A, B > ) bFetch;
我是否需要手动将我的规范转换为谓词,并用它做一些其他事情,以尝试用某种混合方法解决我的问题


任何建议都将不胜感激。

我遇到了同样的错误,但实际上不是错误:

findAllSpecification,Pageable此方法引发2个不同的查询

第一个是计数查询,您必须小心。 第二个是实际执行的行查询

您可以使用下面的代码检查查询类型

if (query.getResultType() != Long.class && query.getResultType() != long.class){
   root.fetch("entity1");
} 

嗨,我马上就来试试,谢谢。可以肯定的是,当你说相同的错误时,你指的是与提取相关的错误?我列出了关于fetch和about distinct的错误,所以您将其放在使用fetch的代码中或您的所有规范中?第一个查询是count query,这就是您出现错误的原因。如果clauseThank现在尝试,您可以使用fetch in,您可能必须稍微使用我的代码,因为您可以在上面看到,我正在转换为fetch以加入,但我将根据您提供的条件确定是否加入此常规加入或获取加入,并将快速报告,再次感谢。最后一个问题,记录在哪里?我的意思是,对于一个真正想让这项工作成功的人来说,这是否真的有记录在案?还是人们调试这个问题时的反复试验?嗨,这对我帮助很大。有没有办法用更深层的方式来处理它?多次回迁导致多个行李异常。
select distinct colA1, colA2, coAl3 from (select colA1, colA2, coAl3 

from A inner join B b on ........ order by b.colB1)
if (query.getResultType() != Long.class && query.getResultType() != long.class){
   root.fetch("entity1");
}