【发布时间】:2015-04-03 11:57:46
【问题描述】:
我有一个实体类 A,它有一组具有多对多关系的 B 类实体(超出了我需要这个的范围)
class A {
@ManyToMany(cascade = CascadeType.ALL)
Set<B> setOfB;
}
现在,给定一个 B 类的对象,我如何检索在其 Set 中有 B 对象的 A 类的对象??
我已经在我的 A 类存储库中尝试过:
interface Arepository extends JpaRepository<A, Long> {
@Query("from A a where ?1 in a.setOfB")
List<A> findByB(B b)
}
但它给了我一个 SQLGrammarException,那么正确的语法是什么?
感谢您的帮助。
【问题讨论】:
-
你能试试
@Query("from A a where ?1 member of a.setOfB")吗? -
你拯救了我的一天......你看我对 SQL 的理解并不像你可能理解的那样......非常感谢你编辑:废话......我赞成你的评论,但是犯了错误我已经撤消了它,现在它不允许我再次投票!!!真的很抱歉,我怎样才能再次投票给你?
-
糟糕,您在 JPQL 查询的开头错过了“SELECT a”。毕竟 JPQL 不能像 JPA 规范所说的那样从“FROM”开始
-
@NeilStockton 真的吗?我知道在 SQL 查询中我当然必须有选择,但是在使用 spring 的情况下,我可以省略它,并且它可以工作。例如,Predrag 建议的查询在没有 'select' 的情况下工作......请注意,我传递的参数是 ":b" [findBy(@Param("b")B b)] 而不是 ?1
-
JPQL != SQL。 JPQL!= HQL。您将问题标记为 JPA,而不是 Hibernate(或 HQL),所以不,它在 other JPA 实现中不起作用,并且任何声称适用于 JPQL 的文档都应该始终具有“SELECT {alias}” (和 JPA 规范一样)
标签: java spring jpa spring-data spring-data-jpa