java - 如何使用自定义消息记录 jpa 查询?

标签 java hibernate spring-data-jpa log4j2

我有一个带有 spring-data-jpa 2.0.5.RELEASE 的项目。我需要使用参数登录每个执行的查询(insertupdatedeleteselect)的文件,其他信息。我发现您可以启用 Hibernate 来记录查询和参数,但它们不是我需要的格式。

现在它打印出这样的内容: -(信息)Hibernate:从表 a 中选择*,其中 a.x= ? - (info) 绑定(bind)参数 [1] 作为 [VARCHAR] - com.mypackage.foo

我想要这样的东西: -(调试)用户米老鼠要求从表 a 中选择 *,其中 a.x= ? [com.mypackage.foo]

有没有办法做类似的事情? 我尝试使用 aop,但找不到切入点,并且不确定是否找到了正确的包装方法。

这是我的测试。 (不工作)

@Pointcut("within(org.springframework.data.jpa.repository.query.JpaQueryExecution+)")
    public void jpaQueryMethods() {}

    @Pointcut("execution(* execute(..))")
    public void executionMethods() {}

    @Before("jpaQueryMethods()")
    public void beforeJpaQueryExecution(JoinPoint joinPoint){
        logger.fatal(" signature->", joinPoint.getSignature().toLongString());
        if(joinPoint.getArgs()!=null) {
            for(Object arg: joinPoint.getArgs()) {
                logger.info("----------->"+String.valueOf(arg));
            }
        }

最佳答案

为了查看绑定(bind)参数,您必须设置此属性:

#Spring boot
logging.level.org.hibernate.type.descriptor.sql=trace

您还可以添加自定义消息: How to Audit Spring data jpa @Query?

关于java - 如何使用自定义消息记录 jpa 查询?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52875796/

相关文章:

java - 将数据从mysql转换到hbase

java - 没有 moveToFirst 的 Cursor.moveToNext

sql - hibernate ,SQL Server : How could I use default value as value from another column

启用 Spring AOP [JAVA 11] 后,Spring 数据存储库无法正常工作

java - 无法让 MappedSuperClass 抽象实体与 Spring Boot 和 JPA 一起使用

java - 为什么我们不允许在java中重写枚举中的hashcode

java - 通过 JNI 对 C 和 Java 代码使用互斥锁或其他同步方法

mysql - 使用 `.createSQLQuery` 截断后 spring/hibernate 不会回滚事务

java - 如何使用 JPA 将 MySQL 枚举映射到 Java 枚举?

sql - NullHandling.NULLS_LAST 不起作用