[英]Spring Data @Query + Specification
你能幫我連接規范和查詢嗎,Pageable 可以完美地工作,但是我的規范有問題,沒有在哪里添加搜索參數。
public interface RakebackRepository extends JpaRepository<Rakeback, Long>,JpaSpecificationExecutor<Rakeback> {
@Override
@Query(value = "SELECT new domain.model.poker.rakeback.Rakeback(ppr.playerId, SUM(ppr.rakeSum), SUM(ppr.fullRakeBackSum), max(ppra.rakeBackBalance), max(ppra.rakebackRank)) FROM Rakeback as ppr LEFT JOIN ppr.Rakeback as ppra on ppra.status = 'active' LEFT JOIN ppra.rakebackRank as rbb on ppra.rakeBackRankId = rbb.id GROUP BY ppr.playerId ")
Page<Rakeback> findAll(Specification<Rakeback> specification, Pageable pageable);
}
這是來自日志的 SQL
select pokerplaye0_.player_id as col_0_0_, sum(pokerplaye0_.rake_sum) as col_1_0_, sum(pokerplaye0_.full_rake_back_sum) as col_2_0_, max(pokerplaye1_.rake_back_balance) as col_3_0_, max(pokerplaye1_.rake_back_rank_id) as col_4_0_
from rakeback.players_rakebacks pokerplaye0_
left outer join rakeback.players_rakebacks pokerplaye1_ on pokerplaye0_.player_id=pokerplaye1_.player_id and (pokerplaye1_.status='active')
left outer join rakeback.rakeback_settings pokerrakeb2_ on pokerplaye1_.rake_back_rank_id=pokerrakeb2_.id and (pokerplaye1_.rake_back_rank_id=pokerrakeb2_.id)
group by pokerplaye0_.player_id
order by pokerplaye0_.player_id desc limit ?
這是我的演講
public class RakebackListSpec {
private final OperatorService operatorService;
private final PlayerService playerService;
public static Specification<Rakeback> byPlayerId(Long id) {
return (root, query, criteriaBuilder) ->
criteriaBuilder.equal(root.get("playerId"), id);
}
public static Specification<Rakeback> byOperator(Integer operatorId) {
return (root, query, criteriaBuilder) ->
criteriaBuilder.equal(root.get("operatorId"), operatorId);
}
public Specification<Rakeback> getSpec(RakebackListRequestDto request) {
Specification<Rakeback> spec = Specification.where(byOperator(operatorService.getOperator().getId()));
if(request.getOpPlayerId() != null){
CorePlayer player = playerService.getPlayerByOpPlayerId(request.getOpPlayerId());
spec = spec.and(byPlayerId(player.getId()));
}
return spec;
}
@Query
和Specification
不能組合。 有關詳細信息,請參閱此 SO 問題/答案。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.