findById()와 findAll()의 차이점이 궁금합니다.
6973
작성한 질문수 10
예제를 따라 보고 하다가 문의가 있습니다.
강사님의 경우 UPDATE를 테스트 코드에 작성을 하실때 아래와 같이 하셨습니다,
Post save = savePost();save.setTitle("hibernate");
List<Post> posts = postRepository.findAll();
assertThat(posts.get(0).getTitle()).isEqualTo("hibernate");
위 의 경우 발생되는 쿼리를 보면 UPDATE & SELECT 쿼리가 모두 발생합니다.
저는 아래와 같이 findAll() 대신에 findById() 메서드를 통해 테스트 해보았습니다.
Post save = savePost();<p>save.setTitle("hibernate");Optional<Post> post = postRepository.findById(save.getId());
assertThat(post.get().getTitle()).isEqualTo("hibernate");
테스트 결과는 Pass이나 발생되는 쿼리를 보면 실제 DB쪽으로는 UPDATE, SELECT 쿼리 모두 발생하지 않습니다.
JPA Query 메서드인 findAll() 와 findById()가 차이가 있는 것인지 궁금합니다.
늘 빠르게 피드백 주셔서 감사드립니다.
답변 1
5
findAll을 하면 해당 테이블에 있는 모든걸 가져와야 하니까 update를 해야되요. 이 트랜잭션 밖에서 무슨일이 벌어져서 해당 테이블에 무슨 변화가 있었는지 모를 일이니까요. 그러니까 그전에 update도 발생합니다. 현재 트랜잭션 안에서 벌어진 일도 반영하고 select를 해야 현재 가장 최신 상태의 데이터를 가져오는 것이니까요.
그런데 findById는 한건에 대한 데이터자나요. 그리고 또 그 한건이 현재 트랜잭션 안에서 변경중인 데이터구요. 해당 변경 사항은 이미 persistent context가 추적하는 중이었기 때문에 update나 select가 발생할 필요없이, persistent context 안에서 캐싱하고 있던 객체를 찾아주기 때문에 update와 select 모두 발생하진 않았지만, 해당 코드가 테스트가 아니라 일반 애플리케이션 코드였다면 아마 트랜잭션 끝나고 update는 발생했을 겁니다.
spring boot 2.7.13-SNAPSHOT trace 소문자 로그 안나옴
0
533
1
<스프링 데이터 Common: 기본 리포지토리 커스터마이징> 에 대한 질문
0
392
1
comment table에서 저장될떄 왜 id값이 2부터저장이되는건가요?
0
407
1
@EnableJpaRepositories 설정을 스프링부트가 어디에서 자동설정하나요?
0
451
0
PersistenceContext 관련 질문드립니다.
0
335
1
지금(Eager), 나중에(Lazy)의 의미를 모르겠습니다
0
338
1
transaction 구간이 길어질 경우의 처리방법 문의드립니다.
0
905
1
docker postgres
0
293
1
Multiple DataSource 사용 시 transaction 관련 질문 드립니다.
0
2908
1
entity 중 null이 아닌 필드만 update 할 방법이 있을까요?
0
1191
1
Eager 모드일 경우, join을 inner join으로 바꾸는 법이 있을까요?
0
385
1
엔티티를 상속받는 DTO가 일반적인가요?
1
1847
1
커스텀 타입 클래스를 String 타입 처럼 이용해 쿼리하는 방법에 대해 질문하고 싶습니다.
0
339
1
연관관계 매핑 어떤식으로 해야될지 감이 안잡힙니다.
0
566
4
EntityManager 주입시 Annotation관련 질문드립니다.
0
565
1
클래스 기반 프로젝션 사용 관련 질문
0
560
1
save 메서드 질문드립니다.
0
258
1
복잡한 통계쿼리도 JPA로 가능한가요?
2
5593
1
find 와 get의 차이가 무엇인가요?
0
890
1
실무에서 JPA 할 때 FK로 개발할때 연관관계를 꼭 맺어주어야 하나요?
0
999
1
\dt Did not find any relations.
0
481
1
소스코드는 어디서 볼 수 있을까요?
1
287
1
table 생성과 select 문에 대한 질문
0
174
1
스프링 데이터 RepositoryTest 관련 질문
0
2173
2





