発行されるSQLを確認する

最終更新日: 2020年3月14日
R8 | R9

log4j.properties

log4j.propertiesに下記の行を追加することで、system.logに実行したSQLが出力されます。

  1. wagbyapp\webapps\$(APPNAME)\WEB-INF\classes\log4j.properties ファイルをテキストエディタで開きます。
  2. 次の行を有効にします。(初期設定では、上記行はコメントとなっています。先頭の "#" を除くことで有効になります。)
    log4j.logger.org.hibernate.SQL=DEBUG
  3. Webアプリケーションを再起動します。logs\system.log に SQL が記録されます。

hibernate.cfg.xml

ビルドしたアプリケーションの hibernate.cfg.xml を変更することで、Hibernate が生成する HQL を直接、確認する方法を説明します。

  1. wagbyapp\webapps\$(APPNAME)\WEB-INF\classes\hibernate.cfg.xml ファイルをテキストエディタで開きます。
  2. 同ファイルの property 要素を変更します。
    <hibernate-configuration>
      <session-factory>
        ...
        <property name="show_sql">true</property>
        ...
      </session-factory>
    </hibernate-configuration>
    
  3. Webアプリケーションを再起動します。Tomcat を起動したコンソールに HQL が表示されます。(logs\catalina.out にも同時に記録されます。)

プレースホルダの扱い

出力されるSQLは次のような形になります。これは正確には、Hibernate が扱う HQL です。

select jgroupid_0_."userid" as userid1_61_0_, jgroupid_0_."jgroupid" as jgroupid2_56_0_, jgroupid_0_."jgroupidjshid" as jgroupid3_0_ from "juser$jgroupid" jgroupid_0_ where jgroupid_0_."userid"=?

where 句の条件部は '?' となります。実際の値は表示されません。

ワンポイント

'?' に値が含まれた SQL は、データベース側のログで確認するようにしてください。