2012-07-31 12 views
5

Czy jest możliwe tłumaczenie w czasie wykonywania instrukcji HSQL do SQL za pomocą EntityManager?HQL do SQL w Javie 5

Znalazłem takie rozwiązanie, ale nie mają SessionFactory, mam 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; 
} 

Odpowiedz

2

Jeśli dostał EntityManager można użyć poniższy kawałek kodu, aby uzyskać SessionFactory:

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

Przepraszam, ale nie znalazłem getEntityManagerFactory w interfejsie API EntityManager http://docs.oracle.com/javaee/5/api/javax/persistence/EntityManager.html –

+0

Jest dostępne od wersji 2.0 JPA. Zobacz: http://docs.oracle.com/javaee/6/api/javax/persistence/EntityManager.html#getEntityManagerFactory() – MicSim

+0

dzięki @MicSim Będę edytować moje pytanie. –