gpt4 book ai didi

java - Spring Data 不记录 findById

转载 作者:行者123 更新时间:2023-11-29 06:48:12 25 4
gpt4 key购买 nike

创建了一个 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/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com