2012-07-31 8 views
5

क्या रनटाइम में अनुवाद करना संभव है, एचटीक्यूएल स्टेटमेंट EntityManager का उपयोग कर एसक्यूएल में?जावा में एचक्यूएल से एसक्यूएल 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 –

+0

यह जेपीए 2.0 के बाद उपलब्ध है। देखें: http://docs.oracle.com/javaee/6/api/javax/persistence/EntityManager.html#getEntityManagerFactory() – MicSim

+0

धन्यवाद @MicSim मैं अपना प्रश्न संपादित करूंगा। –

संबंधित मुद्दे