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