1対多の関係を持つ2つのエンティティBook
とBook_Category
を作成しました。 BookCategoryRepository.findAll()
を発行したとき、私は休止状態が 'INNER JOIN'クエリを使用すると予想しました。しかし、それはちょうどBook_Categoryからデータを取るためのクエリを発行しました。なぜspringデータjpaがJOINクエリを発行していないのですか?
私には何が欠けていますか?休止状態に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にはBooksのセットも含まれていますので、findAll()を実行すると書籍のセットを受け取る必要があります。あなたがここで達成しようとしていることは何ですか?あなたが本当にクエリでJOINを参照する必要がある場合は、@ queryを書くことができます。 –
HibernateはBook_categoryからselect *だけを出しています。 book_Category inner join Book bからselect *を発行すると思います。私はすでにFetchTypeをeagerに設定しています。だから私は@Queryを使いたくない。 – Manoj
@GrinishNepal '@ query'もその場合は動作しません。 – PSyLoCKe