Java 如何在Hibernate中打印带值的select查询

Java 如何在Hibernate中打印带值的select查询,java,spring,hibernate,spring-data-jpa,Java,Spring,Hibernate,Spring Data Jpa,抱歉,如果以前有人问过这个问题,我也曾在网上发过类似的帖子,到目前为止,没有一个解决方案对我有效。hibernateselect正在抛出com.sybase.jdbc4.jdbc.SybSQLException:不允许从数据类型“VARCHAR”隐式转换为“INT”。使用CONVERT函数运行这个查询。我想看看选择查询发生了什么 以下是我在项目中使用的版本: <spring.version>5.2.0.RELEASE</spring.version> <spring

抱歉,如果以前有人问过这个问题,我也曾在网上发过类似的帖子,到目前为止,没有一个解决方案对我有效。hibernate
select
正在抛出
com.sybase.jdbc4.jdbc.SybSQLException:不允许从数据类型“VARCHAR”隐式转换为“INT”。使用CONVERT函数运行这个查询。
我想看看
选择
查询发生了什么

以下是我在项目中使用的版本:

<spring.version>5.2.0.RELEASE</spring.version>
<spring-boot.version>2.2.0.RELEASE</spring-boot.version>
<spring-boot-dev-tools.version>2.2.6.RELEASE</spring-boot-dev-tools.version>
<hibernate.version>5.4.6.Final</hibernate.version>
<spring-data.version>2.2.0.RELEASE</spring-data.version>
我的属性文件中还有:

spring.jpa.show-sql=true
spring.jpa.properties.hibernate.format_sql=true
我的log4j.xml有以下内容:

    <logger name="org.hibernate">
        <level value="TRACE"/>
    </logger>
    <logger name="org.hibernate.sql">
        <level value="TRACE"/>
    </logger>
    <logger name="org.hibernate.type">
        <level value="TRACE"/>
    </logger>

在src/main/resources下的appication.properties中,将此

logging.level.org.hibernate.SQL=DEBUG
logging.level.org.hibernate.type.descriptor.sql.BasicBinder=TRACE

Spring默认使用logback,因此在类路径中放置以下logback.xml

<?xml version="1.0" encoding="UTF-8"?>
<configuration>
  <appender name="SQL_CONSOLE" class="ch.qos.logback.core.ConsoleAppender" >
    <filter class="ch.qos.logback.core.filter.EvaluatorFilter">
      <evaluator>        
        <matcher>
          <Name>allow</Name>
          <regex>.*Closing\sprepared\sstatement.*</regex>
        </matcher>
        <expression>allow.matches(formattedMessage)</expression>
      </evaluator>
      <OnMismatch>DENY</OnMismatch>
      <OnMatch>ACCEPT</OnMatch>
    </filter>
    <encoder>
        <pattern>---SQL[START]----\n%d{"yyyy-MM-dd'T'HH:mm:ss,SSS"} %replace(%msg){'Closing prepared statement',''}%n-----SQL[END]----\n</pattern>
        <outputPatternAsHeader>false</outputPatternAsHeader>
      </encoder>     
  </appender>
  <appender name="DEFAULT_CONSOLE" class="ch.qos.logback.core.ConsoleAppender" >
  <encoder>
        <pattern>%logger[0]: %msg%n</pattern>
        <outputPatternAsHeader>false</outputPatternAsHeader>
      </encoder>   
  </appender>
  <logger level="TRACE" name="org.hibernate.resource.jdbc.internal.ResourceRegistryStandardImpl" additivity="false">
    <appender-ref ref="SQL_CONSOLE" />
  </logger>
  <root level="ERROR">
    <appender-ref ref="DEFAULT_CONSOLE" />
  </root>
</configuration>

允许
.*关闭\s准备好\s语句*
allow.matches(格式化消息)
否认
接受
---SQL[START]----n%d{“yyyy-MM-dd'T'HH:MM:ss,SSS”}%replace(%msg){“Closing prepared statement',''}%n----SQL[END]----
假的
%记录器[0]:%msg%n
假的

Regex filter将过滤掉必要的日志,您可以在编码器中自定义输出格式。

您只需在
log4j.xml
中将
org.hibernate.sql
转换为
org.hibernate.sql

在log4j.properties中,请执行以下操作:

# logs the SQL statements
log4j.logger.org.hibernate.SQL=debug 

# Logs the JDBC parameters passed to a query
log4j.logger.org.hibernate.type=trace 
    <logger name="org.hibernate.SQL">
        <level value="DEBUG"/>
    </logger>
    <logger name="org.hibernate.type">
        <level value="TRACE"/>
    </logger>
在log4j.xml中,执行以下操作:

# logs the SQL statements
log4j.logger.org.hibernate.SQL=debug 

# Logs the JDBC parameters passed to a query
log4j.logger.org.hibernate.type=trace 
    <logger name="org.hibernate.SQL">
        <level value="DEBUG"/>
    </logger>
    <logger name="org.hibernate.type">
        <level value="TRACE"/>
    </logger>


谢谢Eklavya,我该如何将其转换为xml格式?就像这样:
对于xml,我看到它对我不起作用。我在log4j.xml中添加了BasicBinder作为跟踪,但没有起作用。我已经将org.hibernate设置为TRACE
,也没有说任何关于basicbinder的内容。这是否回答了您的问题?让我试一试,谢谢你的帮助,它不起作用,也没有说任何关于BasicBinder的内容,因为日志级别指向位于org.hibernate.type.descriptor.sql的包BasicBinder。谢谢你的帮助,但这对我也不起作用。在
log4j.xml
中尝试这个
,还有一件事,我只看到输出中打印了
INFO
日志。检查是否正确读取了
log4j.xml
    <logger name="org.hibernate.SQL">
        <level value="DEBUG"/>
    </logger>
    <logger name="org.hibernate.type">
        <level value="TRACE"/>
    </logger>