我创建了两个实体Book并且Book_Category具有一对多关系。当我发出时BookCategoryRepository.findAll(),我希望hibernate状态使用“ INNER JOIN”查询。但是它只是发出查询以从Book_Category获取数据。
Book
Book_Category
BookCategoryRepository.findAll()
我缺少什么?我该怎么做使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中工作
@Fetch(FetchMode.JOIN)