【发布时间】:2013-11-22 02:33:33
【问题描述】:
我有以下实体映射:
@Entity
@Table(name = "books")
public class Book implements Serializable {
@ManyToMany
@JoinTable(name="books2categories",
joinColumns=@JoinColumn(name="book_id"),
inverseJoinColumns=@JoinColumn(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:位置超出数量 声明的序数参数。请记住,序数参数是 1为主!职位:1;嵌套异常是 java.lang.IllegalArgumentException: org.hibernate.QueryParameterException:位置超出数量 声明的序数参数。请记住,序数参数是 1为主!位置:1
我必须通过哪个选项来解决它?
第二个,我可以调试将参数传递给查询的 Spring Data Jpa 逻辑吗? 我收到 Spring Data Jpa 返回的代理,无法理解在哪里使用断点来调试此行为。
更新:
我已经使用(?1) 修复了它:
@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)")
【问题讨论】:
标签: java spring many-to-many jpql spring-data-jpa