如何在QueryDSL中创建一个Q类,不需要实体或与两个表关联。

问题描述 投票:0回答:1

假设我有三个班

    @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;
    }

因此,我有三个Q类

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来创建一个查询DSL的请求。

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

java spring hibernate querydsl
1个回答
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
© www.soinside.com 2019 - 2024. All rights reserved.