2012-07-31 15 views
5

是否有可能在運行時轉換的HSQL語句中使用的EntityManager到SQL?HQL中的Java SQL 5

我發現這個解決辦法,但我沒有SessionFactory的,我的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; 
} 

回答

2

如果你有EntityManager的你可以用下面的一段代碼來獲取的SessionFactory:

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

對不起,但我在EntityManager API中找不到getEntityManagerFactory http://docs.oracle.com/javaee/5/api/javax/persistence/EntityManager.html – 2012-07-31 15:56:51

+0

從JPA 2.0開始可用。請參閱:http://docs.oracle.com/javaee/6/api/javax/persistence/EntityManager.html#getEntityManagerFactory() – MicSim 2012-07-31 16:03:17

+0

感謝@MicSim我將編輯我的問題。 – 2012-08-01 07:43:13