Java Spring数据子实体的Jpa排序和分页

Java Spring数据子实体的Jpa排序和分页,java,hibernate,jpa,spring-data,spring-data-jpa,Java,Hibernate,Jpa,Spring Data,Spring Data Jpa,我有一个1-m关系的父实体和子实体,从父实体到子实体是无方向的。我想让所有的孩子知道排序和分页的父id。 我使用Spring数据尝试了以下操作: -使用@query对实体创建查询,但排序仅适用于父实体 -尝试了本机查询,但不支持分页和排序 -尝试使用PagingAndSortingRepository,但它只有一个findAll(),它将带来所有父记录,而不仅仅是一条 您对如何使用Spring数据做这件事还有什么想法吗?或者我应该试试Hibernate中的Criteria之类的东西吗 以下是我尝

我有一个1-m关系的父实体和子实体,从父实体到子实体是无方向的。我想让所有的孩子知道排序和分页的父id。 我使用Spring数据尝试了以下操作: -使用@query对实体创建查询,但排序仅适用于父实体 -尝试了本机查询,但不支持分页和排序 -尝试使用PagingAndSortingRepository,但它只有一个findAll(),它将带来所有父记录,而不仅仅是一条

您对如何使用Spring数据做这件事还有什么想法吗?或者我应该试试Hibernate中的Criteria之类的东西吗

以下是我尝试过的(Leg是父实体,现金流是子实体):

问题在于排序属性
“paymentDate”
应用于父实体(
分支
),而不是子实体(
现金流


如果要获取子实体的页面,请创建一个返回子实体的查询。不是返回父实体的查询。类似于
select c from Parent p join p children c where…
。是的,我尝试过这样做,但Pageable的排序对象应用于父对象,我需要用于children为什么不发布您尝试过的内容?@Query(value=“select cf from leg.cashflows cf join leg where leg.id=:legId”,countQuery=“select count count count(cf)来自Leg JOIN Leg.cashflows cf,其中Leg.id=:legId”)页面findByLeg(@Param(“legId”)Long legId,Pageable Pageable);Leg是父实体,Cashflows是子实体,但是Pageable对象应用于父实体而不是子实体。我使用2.0.0版测试了您使用cae的情况,该解决方案运行良好。请注意,如果始终希望按paymentDate排序,则可以在查询中硬编码,并避免在页面请求中传递排序。如果希望获取子实体页面,请创建一个返回子实体的查询。不是返回父实体的查询。类似于
select c from Parent p join p children c where…
。是的,我尝试过这样做,但Pageable的排序对象应用于父对象,我需要用于children为什么不发布您尝试过的内容?@Query(value=“select cf from leg.cashflows cf join leg where leg.id=:legId”,countQuery=“select count count count(cf)来自Leg JOIN Leg.cashflows cf,其中Leg.id=:legId”)页面findByLeg(@Param(“legId”)Long legId,Pageable Pageable);Leg是父实体,Cashflows是子实体,但是Pageable对象应用于父实体而不是子实体。我使用2.0.0版测试了您使用cae的情况,该解决方案运行良好。请注意,如果您总是希望按paymentDate排序,则可以在查询中硬编码,并避免在页面请求中传递排序。
@Repository
public interface CashflowRepository extends JpaRepository<Cashflow, Long> {

@Query(value = "SELECT cf FROM Leg leg JOIN leg.cashflows cf WHERE 
       leg.id=:legId",
       countQuery = "SELECT count(cf) FROM Leg leg JOIN leg.cashflows cf 
       WHERE leg.id=:legId")
Page<Cashflow> findByLeg(@Param("legId") Long legId, Pageable pageable);
}
cashflowRepository.findByLeg(1234, new PageRequest(1, 20, new Sort(
            new Sort.Order(Sort.Direction.ASC, "paymentDate"))));
See the exception: org.hibernate.QueryException: could not resolve property: paymentDate of: com.db.treasury.tpmt.model.Leg [SELECT cf FROM com.db.treasury.tpmt.model.Leg leg JOIN leg.cashflows cf WHERE leg.id=:legId order by leg.paymentDate desc]