如何在没有实体或与QueryDSL中的两个表关联的情况下创建QClass

时间:2020-06-12 10:26:50

标签: java spring hibernate querydsl

假设我有三个班级

    @Entity
    public class Book {
        @Id
        @GeneratedValue(strategy = GenerationType.IDENTITY)
        private Long id;

        @Column
        private String name;
    }

    @Entity
    public class Author {
        @Id
        @GeneratedValue(strategy = GenerationType.IDENTITY)
        private Long id;

        @Column
        private String fistName;

        @Column
        private String lastName;
    }

    @Entity
    public class AuthorBookRelation {
        @Id
        @GeneratedValue(strategy = GenerationType.IDENTITY)
        private Long id;

        @ManyToOne
        @JoinColumn(name = "author", referencedColumnName = "id")
        private Author author;

        @ManyToOne
        @JoinColumn(name = "book", referencedColumnName = "id")
        private Book book;
    }

因此,我有三个Qclass

QAuthor QBook QAuthorBookRelation。

但是我只能做两节课。

@Entity
    public class Book {
        @Id
        @GeneratedValue(strategy = GenerationType.IDENTITY)
        private Long id;

        @Column
        private String name;
    }

    @Entity
    public class Author {
        @Id
        @GeneratedValue(strategy = GenerationType.IDENTITY)
        private Long id;

        @Column
        private String fistName;

        @Column
        private String lastName;

        @ManyToMany
        @JoinTable(
                name = "author_book_relation",
                joinColumns = {@JoinColumn(name = "author")},
                inverseJoinColumns = {@JoinColumn(name = "book")}
        )
        private List<Book> books = new ArrayList<>();
    }

然后,不需要类AuthorBookRelation。 但是我需要QAuthorBookRelation来创建带有queryDSL的请求

如何创建绑定到两个表的类?

1 个答案:

答案 0 :(得分:0)

我认为您缺少JPA,JPQL和QueryDSL的要点。您应该加入关联的实体。除非您需要将数据与该关联相关联,否则在任何这些技术中绝对不需要关联实体。

否则,您只需要这样做:

List<Tuple> result = query().from(QBook.book)
     .innerJoin(QBook.book.author, author)
     .select(QBook.book, QAuthor.author)
     .fetch();

等同于以下JPQL:

SELECT book, author FROM Book book INNER JOIN book.author author
相关问题