inflearn logo
강의

강의

N
챌린지

챌린지

멘토링

멘토링

N
클립

클립

로드맵

로드맵

지식공유

스프링 데이터 JPA

insert -> select 와 update-> select 의 동작 차이가 이해가 안됩니다.

368

여섯포반장

작성한 질문수 14

0

안녕하세요 계속 질문을 드르게 되네요.

PostRepository 안에 a() 와 b() 라는 메소드를 두개 만들고,

a() 메소드는  아래와 같이 save 한후, findById() 로 찾는것 입니다.

Insert 쿼리와 select 쿼리가 모두 수행 됐습니다.

==a() 메소드 코드==

@Transactional
private void test04(){
System.out.println("-------------- test 04 시작 ---------------");

Post post = new Post();
post.setTitle("test_04");
post.setLikeCount(1);
post.setCreatDate(new Date());
Post savedPost = postRepository.save(post);

Optional<Post> findPost = postRepository.findById(savedPost.getId());

System.out.println("Result====>"+ findPost.get().getTitle() );
}

==수행결과==

b() 메소드를 

"스프링 데이타 JPA6 update쿼리 " 챕터에서 말씀 하신것처럼 만들면, 강의 하실때 말씀 하시길

update() <- (직접만든것은 권장안함) 수행 후 에 findById() 로 조회를 하게 되면, 

PersistenceContext 에 영속성으로 들어가 있어서 불필요한 쿼리 라고 생각 해서 update 만 수행 되고 select 쿼리는 수행 안된다고 하셨습니다.

왜 a() 와 b() 메소드가 서로 수행이 왜 틀린거죠?

a() 메소드 역시 영속성 컨테이너에는  db에 저장한 내용이 남아 있으니, findByid 시에 쿼리를 날리지 않아도 되지 않나요?

지연 쿼리이고, 싱크를 맞추기 위해  findById() 수행 시점에  Insert 쿼리와 select 쿼리가 날라 간다고 여러 차례 말씀 하셨는데요

a() 와 b() 메소드 모두 db 작업을 했고,  db 작업 후에 findById()를 하는것인데

insert 문은 수행한 a() 는  싱크를 맞추기 위해  select문을 수행하고

update문을 수행한 b()는 싱크를 맞추지 않고 영속성 context에서 가져오는 이유를  모르겠습니다.

JPA spring java

답변 2

0

여섯포반장

답변 감사합니다.

0

백기선

제가 해당 수업 영상을 다시 확인하지 않았지만 제가 강의 중에 말을 잘못했었나보네요. findById가 아니라 findAll을 말한건데요/ Pesist 상태의 객체를 findById하는 경우에는 save를 했든 update를 했든 추적중인 PersistentContext에 들어있기 때문에 다시 조회할 필요가 없어서 select 쿼리가 발생하지 않아야 합니다.

지금처럼 그런 쿼리가 보인다면 트랜잭션 처리가 제대로 안된거고 Persist 상태인 객체가 없기 때문에 다시 조회했을 겁니다.

spring boot 2.7.13-SNAPSHOT trace 소문자 로그 안나옴

0

532

1

<스프링 데이터 Common: 기본 리포지토리 커스터마이징> 에 대한 질문

0

392

1

comment table에서 저장될떄 왜 id값이 2부터저장이되는건가요?

0

407

1

@EnableJpaRepositories 설정을 스프링부트가 어디에서 자동설정하나요?

0

450

0

PersistenceContext 관련 질문드립니다.

0

335

1

지금(Eager), 나중에(Lazy)의 의미를 모르겠습니다

0

338

1

transaction 구간이 길어질 경우의 처리방법 문의드립니다.

0

905

1

docker postgres

0

292

1

Multiple DataSource 사용 시 transaction 관련 질문 드립니다.

0

2908

1

entity 중 null이 아닌 필드만 update 할 방법이 있을까요?

0

1190

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

5592

1

find 와 get의 차이가 무엇인가요?

0

890

1

실무에서 JPA 할 때 FK로 개발할때 연관관계를 꼭 맺어주어야 하나요?

0

998

1

\dt Did not find any relations.

0

481

1

소스코드는 어디서 볼 수 있을까요?

1

287

1

table 생성과 select 문에 대한 질문

0

174

1

스프링 데이터 RepositoryTest 관련 질문

0

2173

2