작성
·
210
0
혹시 트리거를 사용하게 되면 영속성 컨텍스트를 통해 데이터가 바뀌는 것이 아닌데
마이바티스/혹은 데이터베이스를 직접 조작하는것처럼 적용되는지 궁금해서 질문남깁니다.
오늘 데이터상 오류를 발견하고
1주일전의 데이터를 수정했을 때 트리거를 적용시켜서
1주일 전부터 오늘까지의 데이터를 수정하게 된다면
영속성 컨텍스트는 어떻게 적용이 되나요??
예를 들어서
dataA.getTemp() = 100 인 상태에서
dataB의 어떠한 데이터를 변경했을 때 트리거가 동작해서 dataA의 Temp가 변경된다면
영속성컨텍스트는 트리거에 의한 데이터 변경도 감지할 수 있나요?
답변 1
1
안녕하세요. 2010psw님
영속성 컨텍스트는 트리거 뿐만 아니라 외부에서 발생한 SQL의 데이터 변경을 감지할 수 없습니다.
dataA.getTeam() = 100인 상태에서
다른 요청에 의해서 dataA의 값이 200으로 변경되어도 dataA는 변경된 내용을 인식할 수 없습니다.
그런데 생각해보시면 이것은 영속성 컨텍스트 만의 문제는 아닙니다.
우리가 개발을 할 때 JPA를 전혀 사용하지 않고 SQL을 직접 사용해도 동일한 문제가 발생합니다.
예를 들어서
dataA를 조회하는 쿼리를 실행해서
dataA.getTeam() = 100인 상태를 만듭니다.
그 다음에 다른 요청에 의해서(다른 트랜잭션) dataA의 값을 200으로 변경해도
dataA의 값을 조회하면 100인 상태로 남아있게 됩니다.
그래서 이런 문제는 락을 걸거나 다른 방법으로 풀어야 합니다.
감사합니다.