java - Spring Data 不记录 findById

标签 java spring spring-boot spring-data-jpa

创建了一个 Customer 实体和存储库:

public interface CustomerRepository extends CrudRepository<Customer, Long> {
}

和保存并选择实体的 bean:

@Component
public class BeanClass
{
  @Autowired
  CustomerRepository repository;

  @Transactional
  public void tran()
  {
    Customer entity = new Customer("Jack3", "Bauer");
    Customer save1 = repository.save(entity);
    Optional<Customer> byId = repository.findById(Long.valueOf(save1.getId()));
    System.out.println("customer " + byId);
  }
}

我在配置中指定了查询日志记录logging.level.org.hibernate.SQL=TRACE:

spring.datasource.url=jdbc:mysql://localhost/demospring?useUnicode=true&useJDBCCompliantTimezoneShift=true&useLegacyDatetimeCode=false&serverTimezone=UTC
spring.datasource.username=*
spring.datasource.password=*
spring.datasource.driver-class-name=com.mysql.jdbc.Driver
spring.jpa.generate-ddl=true
spring.jpa.hibernate.ddl-auto = update
logging.level.org.hibernate.SQL=TRACE
log4j.logger.org.springframework.transaction=DEBUG
log4j.logger.org.springframework.orm.jpa=DEBUG

我在日志中没有看到 select 查询,只有被持久化的实体的日志记录:

2019-12-28 16:29:56.732  INFO 17623 --- [           main] j.LocalContainerEntityManagerFactoryBean : Initialized JPA EntityManagerFactory for persistence unit 'default'
2019-12-28 16:29:57.331  INFO 17623 --- [           main] com.example.demo.DemoApplication         : Started DemoApplication in 4.526 seconds (JVM running for 5.198)
2019-12-28 16:29:57.382 DEBUG 17623 --- [           main] org.hibernate.SQL                        : insert into customer (first_name, last_name) values (?, ?)
customer Optional[Customer[id=73, firstName='Jack3', lastName='Bauer']]
2019-12-28 16:30:03.455  INFO 17623 --- [       Thread-2] j.LocalContainerEntityManagerFactoryBean : Closing JPA EntityManagerFactory for persistence unit 'default'
2019-12-28 16:30:03.457  INFO 17623 --- [       Thread-2] com.zaxxer.hikari.HikariDataSource       : HikariPool-1 - Shutdown initiated...
2019-12-28 16:30:03.462  INFO 17623 --- [       Thread-2] com.zaxxer.hikari.HikariDataSource       : HikariPool-1 - Shutdown completed.

这是主类:


@SpringBootApplication
public class DemoApplication
{
  private static final Logger log = LoggerFactory.getLogger(DemoApplication.class);

  public static void main(String[] args)
  {
    SpringApplication.run(DemoApplication.class, args);
  }
  @Autowired
  BeanClass bc;
  @Bean
  public CommandLineRunner demo(CustomerRepository repository)
  {

    return (args) -> {
      bc.tran();
    };
  }
}

能否记录findById

最佳答案

这是预期的:它不需要执行任何查询,因为您只是在同一个事务中持久化实体:它在一级缓存中。

顺便说一下,那时它甚至还没有被插入到数据库中。

如果您执行一个事务来保存实体,并执行另一个事务以通过 ID 查找它,那么您会看到正在执行的 SQL 查询。

关于java - Spring Data 不记录 findById,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59511412/

相关文章:

spring - 如何在Spring Boot中设置嵌入式tomcat的日志级别?

spring - 使用 Spring amqp 在 rabbitmq 中重新排队消息

java - 我们可以安全地将 `tomcat.addTldSkipPatterns("*.jar")` 用于使用嵌入式 tomcat 的纯后端 spring 引导服务吗

java - 在 Java 中从一种方法调用数组到另一种方法时遇到问题

JAVA-Android-根据 CA 证书(颁发者证书)验证 X509 证书

java - 未达到 Spring MVC 中的异常处理

java - 为什么 Redis 不在 __keyevent@*__ :expired topic events? 上调用我的 MessageListener

spring-boot - 如何限制运行微服务的spring boot应用创建的数据库连接

java - JPA不保存带有@Transactional注释的选择结果

java - 什么是 log4j2 中的 LoggerRepository 的等价物