spring data jpa query value in a Set

spring data jpa query value in a Set

我有一个实体 class A,它有一组 class B 的实体,具有多对多关系(超出我需要这个的范围)

class A {

    @ManyToMany(cascade = CascadeType.ALL)
    Set<B> setOfB;
}

现在,给定一个 class B 的对象,我如何检索 class A 的对象,其集合中有 B 对象??

我已经在我的 class 存储库中尝试过:

interface Arepository extends JpaRepository<A, Long> {

    @Query("from A a where ?1 in a.setOfB")
    List<A> findByB(B b)
}

但是它给了我一个 SQLGrammarException,那么正确的语法是什么?

感谢您的帮助。

试试 @Query("SELECT a from A a where ?1 member of a.setOfB")

元模型class:

@Generated(value = "org.hibernate.jpamodelgen.JPAMetaModelEntityProcessor")
@StaticMetamodel(A.class)
public class A_ {
    public static volatile SetAttribute<A, B> bSet;
}

规范实用程序:

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));
    }
}