Как вернуть несколько в java, JPA - PullRequest
0 голосов
/ 18 марта 2020

У меня есть два объекта, Студент и Книга. Студент имеет отношения @OneToMany с Книгой, а у Книги есть только идентификатор, имя и год публикации. То, что я хочу, чтобы вернуться из Query, это -> Выберите s.name, b.name, b.publishYear из внутренней книги присоединения ученика b на s.id = b.studentId. Как вернуть s.name, b.name и b.publishYear?

1 Ответ

0 голосов
/ 18 марта 2020
entityManager.createQuery("select s.name, b.name, b.publishYear from Student s join s.books b");

Это вернет List<Object[]>

Если вы хотите вернуть список DTO, вы можете использовать выражение конструктора:

entityManager.createQuery("select new model.BookDTO(s.name, b.name, b.publishYear) from Student s join s.books b");

Это вернет List<BookDTO>

BookDTO должен выглядеть следующим образом:

package model;

public class BookDTO() {

    private final String studentName;
    private final String bookName;
    private final String publishYear;

    public BookDTO(String studentName, String bookName, String publishYear) {
        this.studentName = studentName;
        this.bookName = bookName;
        this.publishYear = publishYear;
    }

    // getters
}

Подробнее о проекции в документации Hibernate:

https://docs.jboss.org/hibernate/orm/5.4/userguide/html_single/Hibernate_User_Guide.html#hql -select-clause

...