Я хочу создать JPA с нумерацией страниц.Я пытался реализовать это:
@Override
public Page<PaymentTransactions> findAll(Specification<PaymentTransactions> spec, Pageable pageable) {
int pageNumber = pageable.getPageNumber();
int pageSize = pageable.getPageSize();
String hql = "select e from " + PaymentTransactions.class.getName() + " e LIMIT :limit OFFSET :offset";
TypedQuery<PaymentTransactions> query = entityManager.createQuery(hql, PaymentTransactions.class).setParameter("limit", pageSize).setParameter("offset", pageNumber);
Page<PaymentTransactions> paymentTransactions = (Page<PaymentTransactions>) query.getResultList();
return paymentTransactions;
}
Как я могу вернуть объект страницы без использования приведения?
РЕДАКТИРОВАТЬ Я также пытался это:
Конечная точка:
@Autowired
private PaymentTransactionRepository transactionRepository;
@GetMapping
public Page<PaymentTransactionsDTO> page(@PathVariable int page, @PathVariable int size) {
return transactionRepository
.findAll(page, size)
.map(mapper::toDTO);
}
Репозиторий:
public interface PaymentTransactionRepository extends CrudRepository<PaymentTransactions, Integer>, JpaSpecificationExecutor<PaymentTransactions> {
@Query(nativeQuery=true,
value="SELECT * FROM payment_transactions \n-- #pageable\n",
countQuery="SELECT count(*) FROM payment_transactions")
Page<PaymentTransactions> findAll(Pageable page);
}
РЕДАКТИРОВАТЬ 2. Я также попробовал это:
@GetMapping("page")
public Page<PaymentTransactionsDTO> page(@PathVariable int page, @PathVariable int size) {
PageRequest pageRequest = PageRequest.of(page, size);
return transactionRepository.findAll(pageRequest).map(mapper::toDTO);
}
Интерфейс:
public interface PaymentTransactionRepository extends CrudRepository<PaymentTransactions, Integer>, JpaSpecificationExecutor<PaymentTransactions> {
Page<PaymentTransactions> findAll(Pageable page);
}
Реализация:
@Override
public Page<PaymentTransactions> findAll(Pageable page) {
int pageNumber = page.getPageNumber();
int pageSize = page.getPageSize();
String hql = "select e from " + PaymentTransactions.class.getName() + " e LIMIT :limit OFFSET :offset";
TypedQuery<PaymentTransactions> query = entityManager.createQuery(hql, PaymentTransactions.class)
.setParameter("limit", pageSize).setParameter("offset", pageNumber);
Page<PaymentTransactions> paymentTransactions = (Page<PaymentTransactions>) query.getResultList();
return paymentTransactions;
}