2012-07-31 13 views
5

¿Es posible traducir en tiempo de ejecución la sentencia HSQL a SQL utilizando EntityManager?HQL to SQL en Java 5

He encontrado esta solución, pero no tengo la sessionFactory, tengo EntityManager

protected String toSql(String hqlQueryText) { 
    if (sessionFactory != null && hqlQueryText != null && hqlQueryText.trim().length() > 0) { 
     final QueryTranslatorFactory translatorFactory = new ASTQueryTranslatorFactory(); 
     final SessionFactoryImplementor factory = (SessionFactoryImplementor) sessionFactory; 
     final QueryTranslator translator = translatorFactory.createQueryTranslator(hqlQueryText, hqlQueryText, 
     Collections.EMPTY_MAP, factory); 
     translator.compile(Collections.EMPTY_MAP, false); 
     return translator.getSQLString(); 
     } 
    return null; 
} 

Respuesta

2

Si tienes el EntityManager puede utilizar el siguiente fragmento de código para obtener la SessionFactory:

EntityManager em = ... 
SessionFactory sf = ((EntityManagerFactoryImpl)em.getEntityManagerFactory()).getSessionFactory(); 
+0

Lo sentimos, pero no encuentro getEntityManagerFactory en la API EntityManager http://docs.oracle.com/javaee/5/api/javax/persistence/EntityManager.html –

+0

Está disponible desde JPA 2.0. Ver: http://docs.oracle.com/javaee/6/api/javax/persistence/EntityManager.html#getEntityManagerFactory() – MicSim

+0

gracias @MicSim Editaré mi pregunta. –