Код: Выделить всё
select * from EntityA ea where ea.lastUpdateTS >= (select creationDate from EntityB where status='PUBLISHED' order by creationDate DESC limit 1)
Код: Выделить всё
//Main query
CriteriaBuilder criteriaBuilder = entityManager.getCriteriaBuilder();
CriteriaQuery rootCriteriaQuery = criteriaBuilder.createQuery(EntityA.class);
Root baseEntityRoot = rootCriteriaQuery.from(EntityA.class);
Path path = baseEntityRoot.get("lastUpdateTS");
//Sub query
Subquery subQuery = rootCriteriaQuery.subquery(EntityB.class);
Root subRoot = subQuery.from(EntityB.class);
subQuery.select(subRoot.get("creationDate"));
Predicate publishedPredicate = criteriaBuilder.equal(instantRoot.get("status"), "PUBLISHED");
instantSubQuery.where(publishedPredicate);
Код: Выделить всё
rootCriteriaQuery.where(criteriaBuilder.greaterThanOrEqualTo(path, instantSubQuery));
Подробнее здесь: https://stackoverflow.com/questions/793 ... l-operator