Отображение @Query с множественным выбором столбцов на объект Java в @Repository - возможно ли это из коробки? - PullRequest
0 голосов
/ 01 апреля 2020

Можно ли отобразить результаты Hibernate @Query следующим образом (в @Repository интерфейсе, расширяющем @JpaRepository):

@Query("select u.id, u.email, u.status from user u")
public SimpleUserDTO getAllUsersSimpleData();

непосредственно на Java объект, подобный этому:

public class SimpleUserDTO {
    private Long id;
    private String email;
    private String status;
}

Что я знаю, так это то, что при выполнении чего-то подобного:

Query query = session.createQuery("select u.id, u.email, u.status from user u");

результат может быть извлечен в List<Object[]>:

List<Object[]> users = (List<Object[]>) query.list();

Но можно ли сопоставить его непосредственно с List<SimpleUserDTO> без написания дополнительного метода, который сопоставит значения с SimpleUserDTO?

1 Ответ

3 голосов
/ 01 апреля 2020

У вас есть два варианта.

Опция 1: выражение конструктора:

@Query("select new <insert_package_here>.SimpleUserDTO(u.id, u.email, u.status) from user u")
public List<SimpleUserDTO> getAllUsersSimpleData();

Опция 2: использовать проекцию интерфейса

Превратите ваш DTO в интерфейс, и вы сможете использовать его без аннотации @Query

public List<SimpleUserDTO> getAllUsersSimpleData();

Более подробную информацию о проекциях и JPA Spring Data можно найти в документации:

https://docs.spring.io/spring-data/jpa/docs/current/reference/html/#projections

...