Aşağıdaki kişiler eşleme ettik:Nesil sorgu
@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 arayüzü aranacaktır:
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);
Sorgunun kendisinde hatalıysam lütfen beni düzeltin. Ben findByCategories
yöntemi için testi, ben hatayı alıyorum:
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
hangi seçenek bunu çözmek gerekiyor?
Ve ikincisi, argümanı sorguya ileten Spring Data Jpa mantığında hata ayıklayabilir miyim? Spring Data Jpa tarafından döndürülen bir proxy alıyorum, bu davranışın hatalarını ayıklamak için break point'in nerede kullanılacağını anlayamıyorum.
GÜNCELLEME: Ben (?1)
kullanarak çözdüm : parametre adları byte kaybolur yana
@Query("SELECT b FROM Book b INNER JOIN b.categories c WHERE c IN (?1)")
yerine
@Query("SELECT b FROM Book b INNER JOIN b.categories c WHERE c IN (:categories)")