// Get results using Tuple
CriteriaBuilder qb = em.getCriteriaBuilder();
CriteriaQuery<Tuple> criteriaQuery = qb.createTupleQuery();
Root<Order> order = criteriaQuery.from(Order.class);
Join<Item, Producer> producer = order.join(Order_.items).join(Item_.producer);
criteriaQuery.select(qb.tuple(order, producer));
criteriaQuery.where(qb.equal(order.get(Order_.filled), Boolean.TRUE));
TypedQuery<Tuple> eq = em.createQuery(criteriaQuery);
List<Tuple> criteriaResults = eq.getResultList();
// Get results using custom class