Java 5中的HQL to SQL

Jav*_*era 5 java sql hibernate java-ee

是否可以在运行时将HSQL语句转换为使用EntityManager的SQL?

我找到了这个解决方案,但我没有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;
}
Run Code Online (Sandbox Code Playgroud)

Mic*_*Sim 2

如果您获得了 EntityManager,则可以使用以下代码来获取 SessionFactory:

EntityManager em = ...
SessionFactory sf = ((EntityManagerFactoryImpl)em.getEntityManagerFactory()).getSessionFactory();
Run Code Online (Sandbox Code Playgroud)