EclipseLinkのLoggingを利用したJPQLの発行SQLの確認   Leave a comment

1.発行SQLのログ出力方法
デバッグおよびテストを行う場合などで、JPQLの変換後のSQLの情報が必要なる場合があります。persistence.xmlに2行追加するだけです。
persistence.xmlに10行目と、11行目を追加します。10行目は、JPQLの発行したSQL文をログ出力するために、「eclipselink.logging.level.sql」の項目を「FINE」に設定します。また11行目は、ホスト変数をログ出力するかどうかの設定です。
図 1. persistence.xmlファイル例

<?xml version="1.0" encoding="UTF-8"?>
<persistence version="2.0" xmlns="http://java.sun.com/xml/ns/persistence" 
 xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
 xsi:schemaLocation="http://java.sun.com/xml/ns/persistence 
 http://java.sun.com/xml/ns/persistence/persistence_2_0.xsd">
  <persistence-unit name="testPU" transaction-type="JTA">
    <jta-data-source>jdbc/db2</jta-data-source>
    <exclude-unlisted-classes>false</exclude-unlisted-classes>
    <properties>
      <property name="eclipselink.logging.level.sql" value="FINE"/>
      <property name="eclipselink.logging.parameters" value="true"/>
    </properties>
  </persistence-unit>
</persistence>

図 2. 実行JPQL

Query query = em.createQuery("SELECT p FROM Product p WHERE p.id = :id and p.productName = :productName");
query.setParameter("id", 10);
query.setParameter("productName", "パソコン");
query.getResultList();

図 3. 出力ログ

詳細レベル (低): SELECT ID, CREATE_PROGRAM_ID, CREATE_TIMESTAMP, CREATE_USER_ID, MAKER, PRODUCT_NAME, PRODUCT_SPECIFICATION_CONTENT, PRODUCT_SPECIFICATION_DIV, RELEASE_DATE, UPDATE_PROGRAM_ID, UPDATE_TIMESTAMP, UPDATE_USER_ID FROM PRODUCT WHERE ((ID = ?) AND (PRODUCT_NAME = ?))
	bind => [10, パソコン]

2.総評
プログラム上でホスト変数のログ出力を行わずに、EclipseLinkのLogging設定を行うだけで、ホスト変数の確認ができるのがとても便利です。使用するフレームワークによりますが、ホスト変数のログ出力を、コーディングしなければならないこともあるので、とても便利です。
お手数ですが、この記事が、あなたのお役に立った場合は、ぜひ、「いいね」ボタンを押してくれるとうれしいです。自分自身のモチベーションの維持と、このブログを読んでくださる、他の読者にも参考になると思います。

3.参照
EclipseLink/Examples/JPA/Logging Log Level Configuration

©中條勝徳 and okulejp.com, 2012.

okule による EclipseLink, J2EE, JPA への投稿 (12月 19, 2012)

タグ:

コメントを残す

以下に詳細を記入するか、アイコンをクリックしてログインしてください。

WordPress.com ロゴ

WordPress.com アカウントを使ってコメントしています。 ログアウト /  変更 )

Google フォト

Google アカウントを使ってコメントしています。 ログアウト /  変更 )

Twitter 画像

Twitter アカウントを使ってコメントしています。 ログアウト /  変更 )

Facebook の写真

Facebook アカウントを使ってコメントしています。 ログアウト /  変更 )

%s と連携中

%d人のブロガーが「いいね」をつけました。