Pageable и @Param в spring проблеме JpaRepository [2]

Я знаю этот вопрос, но используя org.springframework.data:spring-data-jpa:1.7.0.RELEASE, я все еще имею ту же проблему (Either use @Param on all parameters except Pageable and Sort typed once, or none at all!). Мой класс:

public interface BalanceHistoryRepository extends JpaRepository<BalanceHistory, Long> {
    @Query("select bh from BalanceHistory bh where bh.account.id = :idAccount")
    public BalanceHistory findCurrentBalanceByAccountNumber(PageRequest pageCriteira, @Param("idAccount") long idAccount);
}

Edit

Вызов:

 Pageable page = new PageRequest(0, 1, Sort.Direction.DESC, "date");
        BalanceHistory bh = balanceHistoryRepository.findCurrentBalanceByAccountNumber(1,page);

Метод:

@Query("select bh from BalanceHistory bh where bh.account.id = :idAccount")
public BalanceHistory findCurrentBalanceByAccountNumber(@Param("idAccount") long idAccount, Pageable pageCriteira);

Ответ 1

Убедитесь, что вы используете Pageable вместо PageRequest, чтобы первый признак был признан не связанным с фактическим запросом. Кроме того, вам нужно изменить тип возвращаемого значения на Page или List, поскольку вы в большинстве случаев возвращаете несколько результатов.

public interface BalanceHistoryRepository extends CrudRepository<BalanceHistory, Long> {

  @Query("select bh from BalanceHistory bh where bh.account.id = :idAccount")
  Page<BalanceHistory> findCurrentBalanceByAccountNumber(@Param("idAccount") long idAccount, Pageable pageable);
}

Это должно сделать трюк. Обратите внимание, что мы обычно рекомендуем не расширять специализированные интерфейсы магазина, поскольку они раскрывают API-интерфейс, специфичный для магазина, который должен быть открыт только в случае необходимости.

Ответ 2

Я столкнулся с тем же исключением, когда случайно импортировал неправильный класс Pageable.

Это также может произойти, если вы используете PageRequest в хранилище.

должно быть,

import org.springframework.data.domain.Pageable;