Если ты хочешь что-то типа такого:
CriteriaBuilder cb = em.getCriteriaBuilder();
CriteriaQuery<Book> q = cb.createQuery(Book.class);
Root<Book> b = q.from(Book.class);
q.select(b).orderBy(cb.desc(b.get("id")));
TypedQuery<Book> findAllBooks = em.createQuery(q);
Т.е. строить запросы программно, то гугли что-то типа "JPA динамические запросы". Как их правильно использовать, смотри
тут.
А чтобы посмотреть, что же нагенерил тебе твой ORM-провайдер, то у Query есть метод unwrap, который вернёт тебе имплементацию JPA-провайдера (самый популярный - это hibernate). А далее, можно получить сгенерированный SQL.
Подробнее тут (со слов "Getting the JPQL/SQL Strin....