Jpa 如何通过CriteriaBuilder从实体中选择集合属性

Jpa 如何通过CriteriaBuilder从实体中选择集合属性,jpa,eclipselink,criteria,Jpa,Eclipselink,Criteria,我有这个实体: public Entity { @JoinTable(name = "entity_equivalents", joinColumns = { @JoinColumn(name = "entity_new")}, inverseJoinColumns = { @JoinColumn(name = "entity_old")}) @OneToMany

我有这个实体:

public Entity {

    @JoinTable(name = "entity_equivalents",
            joinColumns = {
                @JoinColumn(name = "entity_new")},
            inverseJoinColumns = {
                @JoinColumn(name = "entity_old")})
    @OneToMany
    private Set<Entity> equivalents;

您必须连接实体和等价物。然后得到一个结果列表。您如何使用SQL来实现这一点?在SQL中有几种方法可以实现这一点,这不是问题所在,我可以跳转到entity_equivalent表并选择entity_old where entity_new=或进行子查询:select*from entity where id in select entity_old bla bla bla blaSo基于您的SQL示例,您应该将其转换为CriteriaAPI。有很多例子,比如使用root.join。你必须连接实体和等价物。然后得到一个结果列表。您如何使用SQL来实现这一点?在SQL中有几种方法可以实现这一点,这不是问题所在,我可以跳转到entity_equivalent表并选择entity_old where entity_new=或进行子查询:select*from entity where id in select entity_old bla bla bla blaSo基于您的SQL示例,您应该将其转换为CriteriaAPI。有很多例子,比如使用root.join。
  public Set<Entity> findEquivalents(Entity p1) {
        EntityManager em = getEntityManager();
        CriteriaBuilder cb = em.getCriteriaBuilder();
    // HERE is the problem
        CriteriaQuery<Set<Entity>> query = cb.createQuery(); // <----
        Root<Entity> root = query.from(Entity.class);
        Expression<Set<Entity>> exx= root.get(Entity_.equivalents);
        query.select(exx); 
        query.where(cb.equal(root.get(Entity_.id), p1.getId()));
        return em.createQuery(query).getSingleResult();

    }
return new HashSet<>(getEntityManager()
.createQuery("SELECT o.equivalents from Entity o where o.id=" + id)
.getResultList());