spring中的数据jpa查询值

时间:2015-04-03 11:57:46

标签: java spring jpa spring-data spring-data-jpa

我有一个实体类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,所以这是正确的语法?

感谢您的帮助。

2 个答案:

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