私は次のエンティティのマッピングをしました:世代クエリ
@Entity
@Table(name = "books")
public class Book implements Serializable {
@ManyToMany
@JoinTable(name="books2categories",
[email protected](name="book_id"),
[email protected](name="category_id"))
Collection<Category> categories;
...
@Entity
@Table(name = "categories")
public class Category implements Serializable {
@ManyToMany(mappedBy="categories")
private Collection<Book> books;
BookRepositoryインタフェースが見れます。
public interface BookRepository extends JpaRepository<Book, Long> {
@Query("SELECT b FROM Book b INNER JOIN b.categories c WHERE c IN (:categories)")
List<Book> findByCategories(Collection<Category> categories);
質問自体が間違っている場合は私に修正してください。 私はfindByCategories
メソッドのテストを実行し、私はエラーを取得しています:
testFindByCategories(com.savdev.springmvcexample.repository.JpaBookRepositoryTest): org.hibernate.QueryParameterException: Position beyond number of declared ordinal parameters. Remember that ordinal parameters are 1-based! Position: 1; nested exception is java.lang.IllegalArgumentException: org.hibernate.QueryParameterException: Position beyond number of declared ordinal parameters. Remember that ordinal parameters are 1-based! Position: 1
どのオプション私はそれを解決する必要がありますか?
もう1つ、引数に引数を渡すSpring Data Jpaロジックをデバッグできますか? 私は、Spring Data Jpaによって返されたプロキシを取得していますが、この動作をデバッグするためにブレークポイントを使用する場所を理解できません。
UPDATE:
@Query("SELECT b FROM Book b INNER JOIN b.categories c WHERE c IN (?1)")
代わりの
@Query("SELECT b FROM Book b INNER JOIN b.categories c WHERE c IN (:categories)")