为什么Spring Data JPA不发出JOIN查询?

我创建了两个实体Book并且Book_Category具有一对多关系。当我发出时BookCategoryRepository.findAll(),我希望hibernate状态使用“

INNER JOIN”查询。但是它只是发出查询以从Book_Category获取数据。

我缺少什么?我该怎么做使hibernate问题的JOIN查询?

Book.java

@Entity

public 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

回到顶部