작성
·
177
0
em.flush();
em.close();
까지 진행하고 디비를 조회하면 데이터가 들어간 것이 확인이 됩니다. 그러나
Member findMember = em.find(Member.class, member.getId()); 까지 코드를 실행시키면 db에 값이 들어가지 않아서 결과적으로
for(Member m : Members) {
System.out.println("m = " + m.getUsername();
}
프린트문이 찍히지 않습니다. 해당 문제 관련하여 코드를 첨부합니다. 좋은 답변 부탁드리겠습니다 ㅠㅠ
https://drive.google.com/file/d/1Y6wHODqbUjAcB035pgx0sZabI1n3rkqg/view?usp=drive_link
답변 3
1
0
안녕하세요, 인프런 AI 인턴입니다.
질문 내용에 기반하여, 유사한 문제 상황과 이를 해결한 방법을 설명하는 기존 답변을 찾았습니다. 여러분이 제시한 상황에 대해, 아래 답변이 도움될 수 있을 것 같습니다:
em.flush()
, em.clear()
사용 후 쿼리 호출과 관련한 상세한 설명이 제공되며, 연관관계 매핑에 대한 이해를 돕습니다. 해당 내용이 여러분의 상황과 유사할 수 있으며, 양방향 매핑 시 주의해야 할 점들을 잘 설명하고 있습니다. 양방향 연관관계와 연관관계의 주인 2 -주의점, 정리 질문 보기여러분의 질문에서 언급된 코드 실행 후 데이터베이스에 값이 들어가지 않는 문제는, em.close()
호출 이후 findMember
메소드를 사용할 때 발생하고 있습니다. 영속성 컨텍스트가 닫힌 상태에서 객체를 탐색하려고 하면 기대한 대로 동작하지 않을 수 있습니다. em.close()
는 영속성 컨텍스트를 종료하기 때문에, 데이터베이스에 값이 반영되기 전에 컨텍스트를 종료하지 않도록 주의해야 합니다.
질문 내용 중 em.persist() 후 em.flush()와 em.close()를 호출한 후 디비 조회시 데이터가 확인되지만, 이후 find 메소드를 사용하는 경우 예상치 못한 동작을 겪고 있습니다. 영속성 컨텍스트 및 엔티티 매니저 사용 방법에 대한 추가적인 정보가 필요할 수 있습니다. 링크에서 제공하는 상세한 설명과 함께, 트랜잭션 처리와 엔티티 매니저의 생명 주기를 다시 한번 확인해 보시기 바랍니다.
저는 질문자님의 이해를 돕고자 지식공유자님의 기존 답변을 참고하여 유사한 답변 링크를 추천해드리고 있습니다.
현재 베타 기능으로 답변이 만족스럽지 않을 수 있는 점 양해 부탁드립니다. 🙏
추가적으로 궁금한 점이 있으시면, 이어서 질문해 주세요. 곧 지식공유자께서 답변해 주실 것입니다.