[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] [List Home]
[eclipselink-users] Cannot get the JPQL & SQL String of a CriteriaQuery

Hi all,

I need to get the JPQL and/or SQL String of a type safe query... but I can't make it work. Let's take a simple example : find all the Book entities. Here is what I can do with a simple dynamic query :

TypedQuery<Book> findAllBooksQuery = em.createQuery("SELECT b FROM Book b ORDER BY b.id DESC", Book.class);
System.out.println("JPQL " + findAllBooksQuery.unwrap(EJBQueryImpl.class).getDatabaseQuery().getJPQLString());
System.out.println("SQL  " + findAllBooksQuery.unwrap(EJBQueryImpl.class).getDatabaseQuery().getSQLString());

As you can see, I use the unwrap(EJBQueryImpl.class) method to get the needed string. And this works fine. But if I do the following, I get a null (for both JPQL and SQL String) :

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> findAllBooksCriteriaQuery = em.createQuery(q);
System.out.println("JPQL " + findAllBooksCriteriaQuery.unwrap(EJBQueryImpl.class).getDatabaseQuery().getJPQLString());
System.out.println("SQL  " + findAllBooksCriteriaQuery.unwrap(EJBQueryImpl.class).getDatabaseQuery().getSQLString());

Any idea what this happens ? I am using the right implementation (i.e. EJBQueryImpl) ?

Thanks
Antonio