web-dev-qa-db-ja.com

Hibernateショー本当のSQL

設定すれば

<property name="show_sql">true</property>

私の hibernate.cfg.xml configurationファイルのコンソールでSQLを見ることができます。

real SQLではありません...データベースに直接渡されるSQLコードを見ることができますか?

例:

そうですか

select this_.code from true.employee this_ where this_.code=?

を見せていただけますか

select employee.code from employee where employee.code=12

本当の SQL?

371
Tommaso Taruffi

log4j.properties

log4j.logger.org.hibernate=INFO, hb
log4j.logger.org.hibernate.SQL=DEBUG
log4j.logger.org.hibernate.type=TRACE
log4j.logger.org.hibernate.hql.ast.AST=info
log4j.logger.org.hibernate.tool.hbm2ddl=warn
log4j.logger.org.hibernate.hql=debug
log4j.logger.org.hibernate.cache=info
log4j.logger.org.hibernate.jdbc=debug

log4j.appender.hb=org.Apache.log4j.ConsoleAppender
log4j.appender.hb.layout=org.Apache.log4j.PatternLayout
log4j.appender.hb.layout.ConversionPattern=HibernateLog --> %d{HH:mm:ss} %-5p %c - %m%n
log4j.appender.hb.Threshold=TRACE

hibernate.cfg.xml

<property name="show_sql">true</property>
<property name="format_sql">true</property>
<property name="use_sql_comments">true</property>

persistence.xml

いくつかのフレームワークはpersistence.xmlを使います:

<property name="hibernate.show_sql" value="true"/>
<property name="hibernate.format_sql" value="true"/>
<property name="hibernate.use_sql_comments" value="true"/>
219
Tommaso Taruffi

実際のSQLを見ることができますか(...)

データベースに直接送信されたSQL(例ではに似た)を見たい場合、 P6Spy (または log4jdbc )。

あるいは、以下のカテゴリのロギングを有効にすることもできます(ここではlog4j.propertiesファイルを使用します)。

log4j.logger.org.hibernate.SQL=DEBUG
log4j.logger.org.hibernate.type=TRACE

最初のものはhibernate.show_sql=trueと同等です、2番目のものはとりわけ束縛されたパラメータを出力します。

参照

349
Pascal Thivent

SQLがすでに印刷されていることが確認できれば、hibernate.cfg.xmlに以下のコードがあることになります。

<property name="show_sql">true</property>

バインドパラメータも印刷するには、log4j.propertiesファイルに以下を追加します。

log4j.logger.net.sf.hibernate.type=debug
15
Brian Riehman

表示されているコードはそのままデータベースに送信されるので、SQLインジェクションを防ぐためにクエリは別々に送信されます。ご存知ですか?マークは、休止状態ではなくデータベースによって番号paramsに置き換えられるプレースホルダーです。

11
gubby

select this_.code from true.employee this_ where this_.code=? is あなたのデータベースに送られるもの。

this_employeeテーブルのそのインスタンスのエイリアスです。

5
Stephen Denne