public static String from(Query query) {
        AbstractProducedQuery abstractProducedQuery = query.unwrap(AbstractProducedQuery.class);
        String[] sqls = abstractProducedQuery
            .getProducer()
            .getFactory()
            .getQueryPlanCache()
            .getHQLQueryPlan(abstractProducedQuery.getQueryString(), false, Collections.emptyMap())
            .getSqlStrings();

        return sqls.length > 0 ? sqls[0] : null;
    }
@Test
    public void testJPQL() {
        doInJPA(entityManager -> {
            Query jpql = entityManager
            .createQuery(
                "select " +
                "   YEAR(p.createdOn) as year, " +
                "   count(p) as postCount " +
                "from " +
                "   Post p " +
                "group by " +
                "   YEAR(p.createdOn)", Tuple.class);

            String sql = SQLExtractor.from(jpql);

            assertNotNull(sql);

            LOGGER.info(
                "The JPQL query: [\n{}\n]\ngenerates the following SQL query: [\n{}\n]",
                jpql.unwrap(org.hibernate.query.Query.class).getQueryString(),
                sql
            );
        });
    }