2012-07-31 5 views
5

Ist es möglich, in der Laufzeit die HSQL-Anweisung mit EntityManager in SQL zu übersetzen?HQL zu SQL in Java 5

Ich habe diese Lösung gefunden, aber ich habe nicht die session, ich habe 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; 
} 

Antwort

2

Wenn Sie die EntityManager bekommen können Sie das folgende Stück Code verwenden, um die Session zu bekommen:

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

Sorry, aber ich finde getEntityManagerFactory in der EntityManager API http://docs.oracle.com/javaee/5/api/javax/persistence/EntityManager.html –

+0

Es ist seit JPA 2.0 verfügbar. Siehe: http://docs.oracle.com/javaee/6/api/javax/persistence/EntityManager.html#getEntityManagerFactory() – MicSim

+0

danke @MicSim Ich werde meine Frage bearbeiten. –