Error rendering WebPanel: No renderer found for resource type: velocity Template contents: <meta name="ajs-keyboardshortcut-hash" content="$keyboardShortcutManager.shortcutsHash">

버전 비교

  • 이 줄이 추가되었습니다.
  • 이 줄이 삭제되었습니다.
  • 서식이 변경되었습니다.


1주차 토론 중 재미있는 의문점이 제기 되었습니다.

"수정했다가 다시 원래대로 되돌리면 업데이트 쿼리가 날아갈까?"

  • 실험을 위해 간단한 코드를 작성하였습니다.

변경만 해도 Dirty Checking을 통해 update 쿼리가 나갈까요??

잘 날아갑니다.


그렇다면 다시 값을 바꾼다면 어떻게 될까요?

...

select 쿼리만 날아갈 뿐 업데이트 쿼리는 날아가지 않았습니다.

혹시 동일성 비교만 하는 걸까요??

  • 같은 value지만 reference는 다른 두 객체를 생성 후 수정하였습니다.


결과는 똑같이 셀렉트 쿼리만 날아갈 뿐 업데이트 쿼리는 날아가지 않았습니다.


스냅샷과 비교는 플러시 시점에 일어나기 때문에

값을 원래대로 돌려놓으면 업데이트 쿼리가 생성되지 않는다.

살짝 더 나아가기

  1. 어떻게 비교하길래 , value와 reference를 동시에 체크하는 걸까?

    1. 기본적으로 Objects.equals() 를 통해 비교하여 두 값 모두 비교 함.
  2. 조회만 하는 트랜잭션에 dirty checking을 못 하게 하려면?

    1. 조회만 하는 트랜잭션엔  로 설정하면 FlushMode를 Manual로 설정하여 더티체킹을 피할 수 있음.
    2. Entity의 Status가 Delete나 Read only로 설정되어있으면 체킹을 피함.
    3. dirty checking이 필요한지 확인하고 checking하는 코드

더 공부해보기