首页 > 解决方案 > 如何在java,jpa中返回多个

问题描述

我有两个对象,学生和书。Student 与 Book 有 @OneToMany 关系,而 Book 只有 id、name 和 publishYear。我想要从查询返回的是这个-> 从学生的内部加入书 b 在 s.id = b.studentId 中选择 s.name、b.name、b.publishYear。如何返回 s.name、b.name 和 b.publishYear?

标签: javahibernatejpa

解决方案


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


推荐阅读