Java 如何在Hibernate中打印带值的select查询
抱歉,如果以前有人问过这个问题,我也曾在网上发过类似的帖子,到目前为止,没有一个解决方案对我有效。hibernateJava 如何在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
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>