【发布时间】:2020-03-18 09:40:33
【问题描述】:
我有两个对象,Student 和 Book。 Student 与 Book 有@OneToMany 关系,而 Book 只有 id、name 和 publishYear。我想要从查询返回的是这个-> 从学生的内部加入书 b 在 s.id = b.studentId 中选择 s.name、b.name、b.publishYear。如何返回 s.name、b.name 和 b.publishYear?
【问题讨论】:
我有两个对象,Student 和 Book。 Student 与 Book 有@OneToMany 关系,而 Book 只有 id、name 和 publishYear。我想要从查询返回的是这个-> 从学生的内部加入书 b 在 s.id = b.studentId 中选择 s.name、b.name、b.publishYear。如何返回 s.name、b.name 和 b.publishYear?
【问题讨论】:
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 文档中阅读有关投影的更多信息:
【讨论】: