Hibernate show real SQL [duplikat]

To pytanie ma już odpowiedź tutaj:

If I set

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

W mojej hibernacji.cfg.plik konfiguracyjny XML w konsoli widzę SQL.

Ale to nie jest prawdziwy SQL... Czy Mogę zobaczyć kod SQL, który zostanie przekazany bezpośrednio do bazy danych?

Przykład:

Widzę

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

Can I see

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

The real SQL?

Author: Daniel Serodio, 2010-03-29

5 answers

Can I see (...) the real SQL

Jeśli chcesz zobaczyć SQL wysyłany bezpośrednio do bazy danych (która jest sformatowana podobnie jak do twojego przykładu), musisz użyć jakiegoś proxy sterownika jdbc, takiego jak p6spy (lub log4jdbc).

Alternatywnie możesz włączyć rejestrowanie następujących kategorii (używając pliku log4j.properties tutaj):

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

Pierwszy jest odpowiednikiem hibernate.show_sql=true, drugi wyświetla powiązane parametry między innymi rzeczy.

Odniesienie

 323
Author: Pascal Thivent,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-03-28 11:33:33

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>
Wytrwałość.xml

Niektóre frameworki używają persistence.xml:

<property name="hibernate.show_sql" value="true"/>
<property name="hibernate.format_sql" value="true"/>
<property name="hibernate.use_sql_comments" value="true"/>
 209
Author: Tommaso Taruffi,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-05-11 17:49:48

Jeśli widzisz już wydrukowany SQL, oznacza to, że masz poniższy kod w hibernate.cfg.xml:

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

Aby wydrukować parametry bind, Dodaj do pliku log4j. properties:

log4j.logger.net.sf.hibernate.type=debug
 15
Author: Brian Riehman,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2010-03-29 12:51:47

Warto zauważyć, że kod, który widzisz, jest wysyłany do bazy danych w takim stanie, w jakim jest, zapytania są wysyłane oddzielnie, aby zapobiec wtrysku SQL. AFAIK ? znaczniki są elementami zastępczymi, które są zastępowane przez paramy liczb w bazie danych, a nie przez hibernate.

 11
Author: gubby,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2010-04-06 21:11:50

select this_.code from true.employee this_ where this_.code=? jest {[5] } co zostanie wysłane do twojej bazy danych.

this_ jest aliasem dla tej instancji tabeli employee.

 6
Author: Stephen Denne,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2010-03-29 09:49:12