criteria.select( orderRoot );
// create correlated subquery
Subquery<Customer> customerSubquery = criteria.subquery( Customer.class );
Root<Order> orderRootCorrelation = customerSubquery.correlate( orderRoot );
Join<Order, Customer> orderCustomerJoin = orderRootCorrelation.join( "customer" );
customerSubquery.where( builder.like( orderCustomerJoin.<String>get( "name" ), "%Caruso" ) );
criteria.where( builder.exists( customerSubquery ) );
em.createQuery( criteria ).getResultList();
em.getTransaction().commit();
em.close();