Check this:
CriteriaBuilder cb = entityManager.getCriteriaBuilder();
CriteriaQuery<Country> c = cb.createQuery(Country.class);
Root<Country> countries = c.from(Country.class);
Subquery<Integer> sq = c.subquery(Integer.class);
Root<SchoolType> schoolTypes = sq.from(SchoolType.class);
sq.select(schoolTypes.<Integer>get("id")).where(
cb.equal(schoolTypes.get("schoolList").get("name"), "blabla"));
c.select(countries).where(cb.in(countries.<Integer>get("id")).value(sq));
TypedQuery<Country> q = entityManager.createQuery(c);
List<Country> result = q.getResultList();
Also instead of schoolTypes.<Integer>get("id")
you can try use schoolTypes.get(SchoolType_.id)
but it never works for me.
My answer is basing on JPA 2.0, Criteria API, Subqueries, In Expressions