방명록
- [Spring Boot]점프 투 스프링부트 실습 중 h2 db에 insert가 되지 않는 현상2023년 07월 31일 13시 53분 38초에 업로드 된 글입니다.작성자: DandyNow728x90반응형
점프 투 스프링부트 실습을 진행하고 있습니다. 실습 프로젝트를 깃허브를 통해 관리하고 있는데요, 데스크톱에서 작업하던 프로젝트를 노트북에서 계속 진행하려고 환경 설정을 새롭게 하고 있었습니다. 그런데 db에 insert가 되지 않는 문제로 인해 애를 먹었습니다.
db에 insert 시도는 JUnit 테스트를 이용해서 진행하였습니다. 해당 실습 내용은 "점프 투 스프링부트"의 2-05 레포지터리(https://wikidocs.net/160890)입니다.
문제의 원인은 @Transactional 때문이었습니다. 해당 어노테이션을 주석 처리하니 데이터가 정상적으로 insert가 잘되었습니다. JUnit 테스트가 성공인데 데이터는 들어가지 않고 아주 애를 먹었었는데 이 어노테이션이 롤백을 시킨 것이 아닐까 추축이 되었습니다.
@Transactional // 롤백 수행 @Test void testJpa() { Question q1 = new Question(); q1.setSubject("sbb가 무엇인가요?"); q1.setContent("sbb에 대해서 알고 싶습니다."); q1.setCreateDate(LocalDateTime.now()); this.questionRepository.save(q1); // 첫번째 질문 저장 Question q2 = new Question(); q2.setSubject("스프링부트 모델 질문입니다."); q2.setContent("id는 자동으로 생성되나요?"); q2.setCreateDate(LocalDateTime.now()); this.questionRepository.save(q2); // 두번째 질문 저장
위 코드를 JUnit으로 실행 후 DB를 조회하면 [그림 1]과 같이 데이터가 추가되지 않을 것을 확인할 수 있습니다(ID 1, 5, 6은 기존에 등록되어 있던 데이터).
@Transactional @Rollback(value = false) // 추가 @Test void testJpa() { Question q1 = new Question(); q1.setSubject("sbb가 무엇인가요?"); q1.setContent("sbb에 대해서 알고 싶습니다."); q1.setCreateDate(LocalDateTime.now()); this.questionRepository.save(q1); // 첫번째 질문 저장 Question q2 = new Question(); q2.setSubject("스프링부트 모델 질문입니다."); q2.setContent("id는 자동으로 생성되나요?"); q2.setCreateDate(LocalDateTime.now()); this.questionRepository.save(q2); // 두번째 질문 저장
위 코드와 같이 @Rollback(value = false) 추가 후 @Transactional을 주석 처리하지 않아도 [그림 2]와 같이 데이터가 추가되었습니다.
참고한 내용
728x90반응형다음글이 없습니다.이전글이 없습니다.댓글