带有子查询和连接的条件查询

时间:2021-02-23 06:44:32

标签: criteria hibernate-criteria criteriaquery

我正在尝试以单向一对多关系连接两个表,并尝试在作为父表属性的范围内检索子对象。

这是我目前的查询。我得到一个空列表,但数据库中有满足此条件的数据

CriteriaBuilder cb = em.getCriteriaBuilder();
CriteriaQuery<Offer> cq = cb.createQuery(Offer.class);
Root<Offer> offer = cq.from(Offer.class);

ParameterExpression<Geometry> circleParm = cb.parameter(Geometry.class);
Subquery<Venue> venueSubquery = cq.subquery(Venue.class);
Root<Venue> venue = venueSubquery.from(Venue.class);
Geometry circle = this.createCircle(offerFilterCriteria.getLatitude(), offerFilterCriteria.getLongitude(),
offerFilterCriteria.getRadius());

venueSubquery.select(venue)
             .where(cb.isTrue(cb.function("st_within", Boolean.class, venue.get("location"), circleParm)));
Expression<UUID> stringExpression = offer.get("id");

Predicate predicateIn = stringExpression.in(venueSubquery);
Predicate predicate1 = cb.like(offer.get("type"), "%" + offerFilterCriteria.getType() + "%");

Predicate predicate2 = cb.greaterThanOrEqualTo(offer.get("maxPartySize"), offerFilterCriteria.getMaxPartySize());

Predicate predicate3 = cb.equal(offer.get("offerStatus"), 2);
cq.distinct(true);
        Predicate andPredicate = cb.and(predicate1, predicate2, predicate3, predicateIn);
        cq.select(offer).where(andPredicate);
        TypedQuery<Offer> query = em.createQuery(cq);
        query.setParameter(circleParm, circle);

        return query.getResultList();

0 个答案:

没有答案
相关问题