java - 如何创建 QClass ,没有实体或与 QueryDSL 中的两个表关联

标签 java spring hibernate querydsl

假设我有三个类(class)

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

因此,我有三个 Qclasses

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 创建请求

如何创建一个绑定(bind)到两个表的类?

最佳答案

我认为您没有捕获 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

关于java - 如何创建 QClass ,没有实体或与 QueryDSL 中的两个表关联,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62342331/

相关文章:

java - 没有适用于 OSGi 应用程序的 'javax.persistence.EntityManagerFactory' 类型的合格 bean

java - HQL/JPA 查找日期范围内的可用项目

java - 将数组的元素加载到集合中

java - 即使递归调用后也不会发生递归

Spring :SQL 状态 [null];错误代码 [17004];列类型无效

java - Spring MVC 模型生命周期

javascript - Spring Controller URL 请求映射仅在带有字符串的空白页面上不起作用

java - 为什么 DATE 函数不能与 Hibernate 中的 count unique 一起使用?

java - SQL 异常executeQuery:17041,索引::3 处缺少 IN 或 OUT 参数

java - 在绘图应用程序中分离模型和 View / Controller