为什么spring数据jpa没有发出JOIN查询?

Man*_*noj 3 hibernate spring-data-jpa

我创建了两个实体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;
}
Run Code Online (Sandbox Code Playgroud)

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;
}
Run Code Online (Sandbox Code Playgroud)

BookCategoryRepository.java

public  interface BookCategoryRepository extends JpaRepository<BookCategory, Integer> {
}


bookCategoryRepository.findAll()
Run Code Online (Sandbox Code Playgroud)

mh-*_*dev 7

Hibernate默认使用第二个查询来检索子集合.其中一个原因是适当的限制查询.否则,如果至少一个具有多于1个子节点,则结果集中的行将比单侧的实体多.

存在一个注释来改变hibernate中的这种行为,Spring Data Jpa存储库会忽略它.注释是@Fetch(FetchMode.JOIN).您可能会考虑如果您确实需要此行为,FetchMode如何在Spring Data JPA中工作.