java–Spring Data Jpa项目使用ManyToMany关系时的生成查询

java–Spring Data Jpa项目使用ManyToMany关系时的生成查询,第1张

概述我有以下实体映射:@Entity @Table(name = 'books') public class Book implements Serializable { @ManyToMany @JoinTable(name='books2categories', joinColumns=@JoinColumn(name='book_i

我有以下实体映射:

@Entity@table(name = "books")public class Book implements Serializable {    @ManyToMany    @Jointable(name="books2categorIEs",joinColumns=@JoinColumn(name="book_ID"),inverseJoinColumns=@JoinColumn(name="category_ID"))    Collection

@Entity@table(name = "categorIEs")public class category implements Serializable {    @ManyToMany(mappedBy="categorIEs")    private Collection

看了BookRepository接口:

public interface BookRepository extends JpaRepository

如果我在查询本身错了,请修复我.
当我为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

我有哪个选项可以解决它?

第二,我可以调试将参数传递给查询的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)")
最佳答案由于参数名称在字节码中丢失,因此您需要使用@Param注释来指示在JPQL中映射为:category变量的参数.所以,你的代码看起来像:

@query("SELECT b FROM Book b INNER JOIN b.categorIEs c WHERE c IN (:categorIEs)")List

?1肯定有效,但可能不那么可读. 总结

以上是内存溢出为你收集整理的java – Spring Data Jpa项目使用ManyToMany关系时的生成查询全部内容,希望文章能够帮你解决java – Spring Data Jpa项目使用ManyToMany关系时的生成查询所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址:https://54852.com/langs/1239991.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2022-06-06
下一篇2022-06-06

发表评论

登录后才能评论

评论列表(0条)