如何在Hibernate 6中从Hibernate Criteria API获取SQL?

v7pvogib  于 2023-10-23  发布在  其他
关注(0)|答案(2)|浏览(133)

我想使用Hibernate 6从CriteriaQuery获取SQL字符串。

  • Query.getQueryString()在CriteriaQuery的Hibernate 6中不再起作用。
  • SQLExtractor.from()也不起作用,因为它只是使用反射来调用Query.getQueryString()
  • 如何从Hibernate Criteria API获取SQL(not for logging)仅适用于最高5的Hibernate版本。
  • 在我的用例中,记录SQL语句是不够的。我需要将它们存储在一个字符串中以便处理。

有什么想法吗?

dl5txlt9

dl5txlt91#

这是Hibernate团队在版本6中的一个有意的设计决定,因为Hibernate迁移到了semantic query model。我在下面的代码中找到了一个解决方法。值得注意的是,该方法返回的HQL格式自Hibernate 5以来略有变化:

QuerySqmImpl<?> unwrap = entityManager.createQuery(query).unwrap(QuerySqmImpl.class);
String queryString = unwrap.getSqmStatement().toHqlString();

你也可以在Hibernate JIRA ticket中看到关于这个问题的一些讨论。

ivqmmu1c

ivqmmu1c2#

SQLExtractor的库已更改:https://github.com/vladmihalcea/hypersistence-utils

<dependency>
        <groupId>io.hypersistence</groupId>
        <artifactId>hypersistence-utils-hibernate-62</artifactId>
        <version>3.6.0</version>
    </dependency>

相关问题