休止状態のタイプ
2.9.11 バージョン以降、Hibernate タイプオープンソース プロジェクトは、Hibernate SQLExtractor
5.4、5.3、5.2、5.1、5.0 を使用していても、任意の JPQL または Criteria API クエリから SQL クエリを取得できるユーティリティを提供します。 4.3、4.2、または 4.1。
JPQL (HQL) クエリから SQL ステートメントを取得する
次の JPQL (HQL) クエリがあるとします。
Query jpql = entityManager.createQuery("""
select
YEAR(p.createdOn) as year,
count(p) as postCount
from
Post p
group by
YEAR(p.createdOn)
""", Tuple.class
);
Hibernate タイプを使用すると、Hibernate で生成された SQL クエリを抽出するのは次のように簡単です。
String sql = SQLExtractor.from(jpql);
そして、抽出された SQL クエリをログに記録すると、次のようになります。
LOGGER.info("""
The JPQL query: [
{}
]
generates the following SQL query: [
{}
]
""",
jpql.unwrap(org.hibernate.query.Query.class).getQueryString(),
sql
);
次の出力が得られます。
- The JPQL query: [
select
YEAR(p.createdOn) as year,
count(p) as postCount
from
Post p
group by
YEAR(p.createdOn)
]
generates the following SQL query: [
SELECT
extract(YEAR FROM sqlextract0_.created_on) AS col_0_0_,
count(sqlextract0_.id) AS col_1_0_
FROM
post p
GROUP BY
extract(YEAR FROM p.created_on)
]
関連する JPQL クエリ文字列をログに記録するために使用できるメソッドを提供Query
する Hibernateorg.hibernate.query.Query
インターフェースにJPQL (HQL) をアンラップしたことに注意してください。getQueryString