학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요.
1. 강의 내용과 관련된 질문을 남겨주세요.
2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요.
(자주 하는 질문 링크: https://docs.google.com/document/d/1j0jcJ9EoXMGzwAA2H0b9TOvRtpwlxI5Dtn3sRtuXQas/edit#heading=h.w2tomwsznga7)
3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요.
(질문 잘하기 메뉴얼 링크: https://docs.google.com/document/d/1xCQKit-1V6l6ObeCe49St33RHPzLF_P_c3o7aSDTKs0/edit#heading=h.7dhnp46ven0v)
질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요.
=========================================
[질문 템플릿]
1. 강의 내용과 관련된 질문인가요? (예/아니오)
2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오)
3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오)
[질문 내용]
제가 선생님 수업을 듣고 detach에 대해 좀 더 자세히 알고싶어서 혼자서 코드를 만지작 해보았습니다.
제가 이해한 내용에 따르면 em.persist()를 하는 순간 영속성 컨텍스트에 저장되고, commit 되는 순간에 영속성 컨텍스트에 저장되어 있으면 insert를 하는 것이라 생각했습니다.
제가 짠 코드는 다음과 같습니다. 저는 두개의 Member 객체를 만들었습니다. 이름은 member1과 member2입니다.
em.persist(member1);
em.persist(member2);
를 한 후 commit을 해보니 당연히 두 객체 다 db에 잘 저장되었습니다.
그 후 저는 db를 초기화 시키고 다시 똑같이 member 객체 두개를 만들었습니다. 이번에는 detach의 작동 원리에 대해 알아보고 싶어서
em.persist(member1);
em.persist(member2);
em.detach(member2);를 한 후 commit을 하였습니다.
제가 이해한 내용에 따르면, member1과 member2는 persist 되었으니 영속성 컨텍스트에서 관리되는 상태이고, member2는 그 후 detach를 당해 영속성 컨텍스트에서 제외되었습니다. 그럼 이 상황에는 member1만 영속성 컨텍스트에 남아있어서, commit을 하는 시점에 member1은 db에 insert가 되어야 하는거 아닌가요? 그런데 직접 실행해보니 member1과 member2 모두 db에 저장되지 않았습니다. 아래 사진은 저의 코드 사진입니다.