인프런 커뮤니티 질문&답변

H K님의 프로필 이미지
H K

작성한 질문수

스프링 DB 2편 - 데이터 접근 활용 기술

다양한 데이터 접근 기술 조합

마지막 부분 6:35 질문

해결된 질문

작성

·

324

0

이렇게 JPA와 JdbcTemplate을 함께 사용할 경우 JPA의 플러시 타이밍에 주의해야 한다. JPA는

데이터를 변경하면 변경 사항을 즉시 데이터베이스에 반영하지 않는다. 기본적으로 트랜잭션이 커밋되는

시점에 변경 사항을 데이터베이스에 반영한다. 그래서 하나의 트랜잭션 안에서 JPA를 통해 데이터를

변경한 다음에 JdbcTemplate을 호출하는 경우 JdbcTemplate에서는 JPA가 변경한 데이터를 읽기

못하는 문제가 발생한다.

이 문제를 해결하려면 JPA 호출이 끝난 시점에 JPA가 제공하는 플러시라는 기능을 사용해서 JPA의 변경

내역을 데이터베이스에 반영해주어야 한다. 그래야 그 다음에 호출되는 JdbcTemplate에서 JPA가

반영한 데이터를 사용할 수 있다.

================================

같은 하나의 트랜젝션인데

변경한 다음에 JdbcTemplate을 호출하는 경우 JdbcTemplate에서는 JPA가 변경한 데이터를 읽기

못하는 문제가 발생한다.
--
이 이유가 데이터를 커밋하지않고 1차 캐쉬에만 변경 한 값을 가지고 있으니까 jdbc 템플릿은 변경 한값을 알 수 없어서 생기는 문제라고 생각하면 되는건가요 ?

 

답변 1

1

안녕하세요. H K님, 공식 서포터즈 y2gcoder입니다.

맞습니다 flush 되기 전이라 DB에 변경 내용이 반영되지 않은 상태에서 JDBCTemplate으로 DB의 값을 불러오면 변경 이전 값을 불러오므로 의도한 값이랑 다른 값을 불러오기 때문입니다.
감사합니다.

H K님의 프로필 이미지
H K

작성한 질문수

질문하기