Java 错误表上的Spring数据排序

Java 错误表上的Spring数据排序,java,spring,spring-data,Java,Spring,Spring Data,我有一个运行Spring Data+Hibernate的应用程序和以下查询: @Query(value = "SELECT NEW com.foo.dto.OfertaBancoDto(y,(SELECT CASE a.id WHEN NULL THEN 0 ELSE 1 END FROM Banco b LEFT JOIN b.blackList a)) FROM Oferta y WHERE y.id IN (SELECT DISTINCT (o.id) FROM Oferta o WHER

我有一个运行Spring Data+Hibernate的应用程序和以下查询:

@Query(value = "SELECT NEW com.foo.dto.OfertaBancoDto(y,(SELECT CASE a.id WHEN NULL THEN 0 ELSE 1 END FROM Banco b LEFT JOIN b.blackList a)) FROM Oferta y WHERE y.id IN (SELECT DISTINCT (o.id) FROM Oferta o WHERE o.status IN (?1) AND o.dataRemocao IS NULL AND o.status = 1)",
        countQuery = "SELECT COUNT(y) FROM Oferta y WHERE y.id IN (SELECT DISTINCT (o.id) FROM Oferta o WHERE o.status IN (?1) AND o.dataRemocao IS NULL AND o.status = 1)")
Page<OfertaBancoDto> randomSearch(Set<StatusOferta> filtroStatus, Pageable pageable);
结果查询是(问题是b.titulo,因为b代表错误的表):

正确的查询应该是:

SELECT NEW com.foo.dto.OfertaBancoDto(y,(SELECT CASE a.id WHEN NULL THEN 0 ELSE 1 END FROM com.foo.entity.Banco b LEFT JOIN b.blackList a)) FROM com.foo.entity.Oferta y WHERE y.id IN (SELECT DISTINCT (o.id) FROM com.foo.entity.Oferta o WHERE o.status IN (?1) AND o.dataRemocao IS NULL AND o.status = 1) order by y.titulo asc

如何指定orderby应筛选的表?

存储库的签名是什么?它应该是这样的:

public interface FooRepo extends JpaRepository<T, ID> {
....
}
公共接口FooRepo扩展了JpaRepository{
....
}
我怀疑您使用了Banco for T。因此,要解决此问题,您可以尝试两个选项:

1) 将该方法移到Oferta的存储库中


2) 将此方法移动到自定义存储库中(我认为这样更好)

我猜您的可分页性如下:

Sort sort = new Sort(Sort.Direction.DESC, "id");
Pageable pageable = new PageRequest(offset, limit,sort)
不要使用“排序”按钮更改可分页内容,如:

// Sort sort = new Sort(Sort.Direction.DESC, "id");
Pageable pageable = new PageRequest(offset, limit)
使用sql实现order by函数:

@Query(value = "SELECT NEW com.foo.dto.OfertaBancoDto(y,(SELECT CASE a.id WHEN NULL THEN 0 ELSE 1 END FROM Banco b LEFT JOIN b.blackList a)) FROM Oferta y WHERE y.id IN (SELECT DISTINCT (o.id) FROM Oferta o WHERE o.status IN (?1) AND o.dataRemocao IS NULL AND o.status = 1) order by y.titulo asc ",
    countQuery = "SELECT COUNT(y) FROM Oferta y WHERE y.id IN (SELECT DISTINCT (o.id) FROM Oferta o WHERE o.status IN (?1) AND o.dataRemocao IS NULL AND o.status = 1)")

页面随机搜索(设置filtroStatus,可分页)

我的签名如下:
存储库的公共接口扩展了EntityRepository
公共接口EntityRepository扩展了JpaRepository、JpaSpecificationExecutor、QueryDSL谓词执行器{}
。另外,所讨论的方法是withint of erta Repository。我无法理解您将该方法移动到自定义存储库的意思。我以为我已经在使用自定义repo(of ertarepository)。哦,对于像您的案例这样的自定义对象的查询,最好使用自定义存储库。请参阅本手册第1.3节。您是否尝试过使用
新排序(Direction.ASC,“y.titulo”)
// Sort sort = new Sort(Sort.Direction.DESC, "id");
Pageable pageable = new PageRequest(offset, limit)
@Query(value = "SELECT NEW com.foo.dto.OfertaBancoDto(y,(SELECT CASE a.id WHEN NULL THEN 0 ELSE 1 END FROM Banco b LEFT JOIN b.blackList a)) FROM Oferta y WHERE y.id IN (SELECT DISTINCT (o.id) FROM Oferta o WHERE o.status IN (?1) AND o.dataRemocao IS NULL AND o.status = 1) order by y.titulo asc ",
    countQuery = "SELECT COUNT(y) FROM Oferta y WHERE y.id IN (SELECT DISTINCT (o.id) FROM Oferta o WHERE o.status IN (?1) AND o.dataRemocao IS NULL AND o.status = 1)")