为什么Spring Data JPA不发出JOIN查询?
我创建了两个实体Book
并且Book_Category
具有一对多关系。当我发出时BookCategoryRepository.findAll()
,我希望hibernate状态使用“
INNER JOIN”查询。但是它只是发出查询以从Book_Category获取数据。
我缺少什么?我该怎么做使hibernate问题的JOIN查询?
Book.java
@Entitypublic class Book {
@Id
@GeneratedValue(strategy = GenerationType.AUTO)
private int id;
private String name;
@ManyToOne
@JoinColumn(name = "book_category_id")
private BookCategory bookCategory;
}
BookCategory.java
@Entity@Table(name = "book_category")
public class BookCategory {
@Id
@GeneratedValue(strategy = GenerationType.AUTO)
private int id;
private String name;
@OneToMany(mappedBy = "bookCategory", fetch = FetchType.EAGER, cascade = CascadeType.ALL)
private Set<Book> books;
}
BookCategoryRepository.java
public interface BookCategoryRepository extends JpaRepository<BookCategory, Integer> {}
bookCategoryRepository.findAll()
回答:
默认情况下,Hibernate使用第二个查询来检索子集合。原因之一是适当的限制查询。否则,如果至少有一个以上的子对象,则结果集中的行将比1边的实体多。
有一个注释可以更改hibernate状态下的此行为,该注释将被Spring Data
Jpa存储库忽略。注释为@Fetch(FetchMode.JOIN)
。如果确实需要此行为,则可以考虑FetchMode如何在Spring DataJPA中工作
以上是 为什么Spring Data JPA不发出JOIN查询? 的全部内容, 来源链接: utcz.com/qa/417205.html