synchronized (entityManager) {
LOGGER.debug("get resurrected JPA objects");
CriteriaBuilder criteriaBuilder = entityManager.getCriteriaBuilder();
CriteriaQuery<String> query = criteriaBuilder.createQuery(String.class);
Root from = query.from(JPAObject.class);
query.select(from.get("oid"));
Subquery<JPAObject> sub = query.subquery(JPAObject.class);
Root f = sub.from(JPAObject.class);
sub.select(f);
Predicate subPredicate1 = criteriaBuilder.equal(from.get("oid"), f.get("oid"));
Predicate subPredicate2 = criteriaBuilder.equal(f.get("isDeleted"), Boolean.TRUE);
Predicate subPredicate3 = criteriaBuilder.gt(from.get("timestamp"), f.get("timestamp"));
sub.where(criteriaBuilder.and(subPredicate1, subPredicate2, subPredicate3));
Predicate predicate1 = criteriaBuilder.notEqual(from.get("isDeleted"), Boolean.TRUE);
Predicate predicate2 = criteriaBuilder.exists(sub);
query.where(predicate1, predicate2);