【发布时间】:2016-07-29 02:23:06
【问题描述】:
我创建了两个具有一对多关系的实体Book 和Book_Category。当我发出BookCategoryRepository.findAll() 时,我希望hibernate 使用'INNER JOIN' 查询。但它只是发出查询以从 Book_Category 中获取数据。
我错过了什么?我应该怎么做才能使hibernate issue 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()
【问题讨论】:
-
加入是因为你在实体上拥有它。实体 BookCategory 也有一套书,所以当你做 findAll() 时,你也应该收到一套书。你想在这里实现什么。如果你真的需要在查询中看到 JOIN,你可以写一个@query。
-
Hibernate 仅发出 select * from Book_category。我希望它发出 select * from book_Category inner join Book b。我已经将 FetchType 设置为渴望。所以我不想使用@Query。
-
@GrinishNepal
@query也没有处理这种情况。