본문 바로가기
  • A space that records me :)
기술/오류 해결 기록

[JAVA] @Transactional 캐싱 문제..

by yjkim_97 2020. 11. 18.

@Transactional

사용했는데..

 

부모메서드에서 

PromCpnType origin = promCpnTypeMapper.readPromCpnType(param);PromCpnType param = new PromCpnType(); 
param.setCpnTypeId(promCpnType.getCpnTypeId()); 
param.setIssDstrSeq(promCpnType.getIssDstrSeq()); 
PromCpnType origin = promCpnTypeMapper.readPromCpnType(param);

 

자식 메서드에서 

PromCpnType param = new PromCpnType(); 
param.setCpnTypeId(promCpnType.getCpnTypeId()); 
param.setIssDstrSeq(promCpnType.getIssDstrSeq()); 
PromCpnType origin = promCpnTypeMapper.readPromCpnType(param);

 

둘다 똑같이 DB에서 가져오는건데..

부모에서 origin데이터를 막 수정하나서 아직 update하기전에 자식에서 DB접근해서 데이터를 가져오는건데..

어째서 DB에 있는 값을 가져오지 않는것인가?

정말 안가져오는건가 아니면 트랜젝션이 걸려있는 메소드는 쿼리실행순서가 다른가?

 

-> 트랜젝션 걸린거 취소하니까 정상적으로 되는데..

 

@Transactinal 을 걸면 모든 객체를 캐싱처리한다.

그래서 직접 DB를 조회하는 쿼리를 호출해도 제일 처음 리턴받은 객체 자체를 캐싱처리하기 때문에,

동일한 DB조회 쿼리시에 캐싱처리된 데이터를 리턴한다.

( 객체의 ID값이 변경되지 않는다. )