작성
·
73
·
수정됨
0
[질문 내용]
강사님이 save를 할때는, 데이터가 디비에서 한번 갔다온(디비에서 조회된) 친구들은 수정시 save호출시 merge가 일어난다고 하셨는데,
영속성 컨텍스트에 그 조회한 데이터가 있으면, merge가 안 일어나지 않나욤?? 디비에서 데이터를 가져왔을 때, 해당 데이터의 변경이 일어나면, 그냥 트랜잭션이 끝날때, flush()가 일어나니까, 놔두면 알아서 더티체킹이 일어나서 업데이트가 되는 것으로 알고있습니다.
그래서, 한번 테스트로 데이터를 변경시키고, 해당 데이터를 save하니 디비에서 한번 더 select가 안 날라가더라고요. 이랬을땐, 아무것도 안 일어나는 건가여? 그리고 트랜잭션이 끝날때 더티체킹이 일어나서 업데이트가 되는 건가여? 영한님이 말하신 건, 영속성 컨텍스트에 해당 데이터를 clear했을 때를 말하는 건가여?
아래 사진 첨부입니다.
@Test
public void test(){
Member member = memberRepository.findById(2L).orElseThrow();
member.setUsername("ㅎㅎ");
memberRepository.save(member);
}
@Test
public void test(){
Member member = memberRepository.findById(2L).orElseThrow();
member.setUsername("gg");
em.flush();
em.clear();
memberRepository.save(member);
}
답변 1
1
안녕하세요. wngus4278님
데이터가 디비에서 한번 갔다온(디비에서 조회된) 친구들은 수정시 save호출시 merge가 일어난다고 하셨는데 -> 이 부분을 더 정확하게 이야기하면 트랜잭션 범위를 벗어난 엔티티를 뜻합니다.
쉽게 이야기해서 영속성 컨텍스트가 사라진 엔티티입니다.
따라서 생각하신 내용과 같습니다 🙂
감사합니다.
감사합니다!