首页 文章

Hibernate显示真正的SQL [重复]

提问于
浏览
354

这个问题在这里已有答案:

如果我订

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

在控制台的 hibernate.cfg.xml 配置文件中,我可以看到SQL .

但它不是真正的SQL ......我能看到将直接传递给数据库的SQL代码吗?

例:

我知道了

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

我可以看吗

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

真正的SQL?

5 回答

  • 6

    我可以看到(...)真正的SQL

    如果你想看到直接发送到数据库的SQL(你的示例格式为 similar ),你将不得不使用某种类型的jdbc驱动程序代理,如P6Spy(或log4jdbc) .

    或者,您可以启用以下类别的记录(在此处使用 log4j.properties 文件):

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

    第一个相当于 hibernate.show_sql=true ,第二个打印绑定参数 .

    参考

  • 15

    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"/>
    
  • 334

    如果您已经可以看到正在打印的SQL,那意味着您在hibernate.cfg.xml中有以下代码:

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

    要同时打印绑定参数,请将以下内容添加到log4j.properties文件中:

    log4j.logger.net.sf.hibernate.type=debug
    
  • 11

    值得注意的是,您看到的代码按原样发送到数据库,查询将单独发送以防止SQL注入 . AFAIK?标记是占位符,由数据库的数字参数替换,而不是由休眠 .

  • 212

    select this_.code from true.employee this_ where this_.code=? is 将发送到您的数据库的内容 .

    this_employee 表的该实例的别名 .

相关问题