У меня есть модель, которая выглядит так:
@Entity
@Data
@AllArgsConstructor
@NoArgsConstructor
public class Sale {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id;
@OneToOne(targetEntity = User.class)
private User customer;
@OneToOne(targetEntity = Product.class)
private Product product;
}
И у меня есть репозиторий для подкачки и сортировки, например:
public interface SaleRepository extends PagingAndSortingRepository<Sale, Long> {}
Но я хотел бы, чтобы метод репозитория «findAll» возвращал пользовательский класс с определенными полями (вместо всех данных вложенных сущностей), сохраняя при этом возможности подкачки и сортировки. Список объектов, которые я хотел бы вернуть, будет содержать что-то вроде:
Но я не уверен, как на самом деле это сделать.
Мой метод контроллера принимает параметры сортировки и разбиения по страницам, а затем делает следующее:
Page<Sale> saleList = saleRepository.findAll(pageable);
return saleList;
Вы можете создать либо интерфейс, либо DTO и использовать его как результат поиска, объявленного в вашем репозитории:
Page<YourDTO> findAllAsDtos(Pageable pageable);
Подробнее о прогнозах читайте здесь: https://docs.spring.io/spring-data/jpa/docs/current/reference/html/#projections
Возможно, вам следует прочитать всю справочную документацию Spring Data JPA. Есть и другие скрытые жемчужины.
Спасибо Саймон. Я раньше не видел такого подхода, кажется, это самый простой и простой способ сделать это. Ваше здоровье!