기술/오류 해결 기록
[JAVA] @Transactional 캐싱 문제..
yjkim_97
2020. 11. 18. 16:32
@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값이 변경되지 않는다. )