Java 弹簧数据不存在';t log findById
创建了Java 弹簧数据不存在';t log findById,java,spring,spring-boot,spring-data-jpa,Java,Spring,Spring Boot,Spring Data Jpa,创建了客户实体和存储库: public interface CustomerRepository extends CrudRepository<Customer, Long> { } 我没有在日志中看到selectquery,只有持久化实体的日志记录: 2019-12-28 16:29:56.732 INFO 17623 --- [ main] j.LocalContainerEntityManagerFactoryBean : Initialized JPA
客户
实体和存储库:
public interface CustomerRepository extends CrudRepository<Customer, Long> {
}
我没有在日志中看到select
query,只有持久化实体的日志记录:
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查询。这是意料之中的:它不需要执行任何查询,因为您只是在同一事务中持久化实体:它在一级缓存中 顺便说一句,当时它甚至还没有被插入到数据库中
如果执行一个事务以保存实体,另一个事务以按ID查找实体,则会看到正在执行SQL查询。原因一级hibernate缓存
未记录findById,因为它位于同一事务(在输入方法tran()时启动)和同一Hibernate会话中。findById的select查询未执行,因为对象已在当前会话中加载。原因是一级hibernate缓存 未记录findById,因为它位于同一事务(在输入方法tran()时启动)和同一Hibernate会话中。findById的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();
};
}
}