如何创建 QClass ,没有实体或与 QueryDSL 中的两个表相关联
How to create a QClass , without an entity or associated with two tables in QueryDSL
假设我有三个 classes
@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。
但我只能做两个 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;
@ManyToMany
@JoinTable(
name = "author_book_relation",
joinColumns = {@JoinColumn(name = "author")},
inverseJoinColumns = {@JoinColumn(name = "book")}
)
private List<Book> books = new ArrayList<>();
}
那么就不需要 class AuthorBookRelation。
但是我需要 QAuthorBookRelation 来创建一个带有 queryDSL
的请求
如何创建绑定到两个表的 class?
我认为您忽略了 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
假设我有三个 classes
@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。
但我只能做两个 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;
@ManyToMany
@JoinTable(
name = "author_book_relation",
joinColumns = {@JoinColumn(name = "author")},
inverseJoinColumns = {@JoinColumn(name = "book")}
)
private List<Book> books = new ArrayList<>();
}
那么就不需要 class AuthorBookRelation。 但是我需要 QAuthorBookRelation 来创建一个带有 queryDSL
的请求如何创建绑定到两个表的 class?
我认为您忽略了 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