java - Java 5 中的 HQL 到 SQL

标签 java sql hibernate jakarta-ee

是否可以在运行时使用 EntityManager 将 HSQL 语句转换为 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;
}

最佳答案

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

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

关于java - Java 5 中的 HQL 到 SQL,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11739929/

相关文章:

java - Grails:使用数据源插件,无法跨不同数据源连接域类

hibernate - 我有 FetchType.LAZY 和 hibernate 对象仍然加载

Java环境依赖编译

java - 如何读取Spring Controller中的多个属性?

java - Java 规范中的方法类型推断

mysql - SQL GROUP BY 同时在每一列中显示最近的日期,没有子查询

java - WebSockets、GlassFish、Grizzly — 无法连接

c# - 如何使用 C# 将数组的元素插入到 SQL Server 数据库中?

mysql - MySQL 中的日期样式

java - 在 WHERE 子句中带有集合的 HQL