我有一个实体类A,它有一组具有ManyToMany关系的B类实体(超出范围我为什么需要这个)
class A {
@ManyToMany(cascade = CascadeType.ALL)
Set<B> setOfB;
}
现在,给定B类的对象,我如何检索A类中具有B对象的对象?
我已经在我的A类资料库中尝试了这个:
interface Arepository extends JpaRepository<A, Long> {
@Query("from A a where ?1 in a.setOfB")
List<A> findByB(B b)
}
但它给了我一个SQLGrammarException,所以这是正确的语法?
感谢您的帮助。
答案 0 :(得分:7)
尝试使用@Query("SELECT a from A a where ?1 member of a.setOfB")
。
答案 1 :(得分:0)
元模型课程:
@Generated(value = "org.hibernate.jpamodelgen.JPAMetaModelEntityProcessor")
@StaticMetamodel(A.class)
public class A_ {
public static volatile SetAttribute<A, B> bSet;
}
规范utils:
public class ASpecs {
public static Specification<A> containsB(B b) {
return (root, query, cb) -> {
Expression<Set<B>> bSet = root.get(A_.bSet);
return cb.isMember(b, bSet);
};
}
}
您的存储库:
public interface ARepository extends JpaRepository<A, Long>, JpaSpecificationExecutor<A> {
}
用法:
@Service
public class YourService {
@Resource
private ARepository repository;
public List<A> getByB(B b) {
return repository.findAll(ASpecs.containsB(b));
}
}