• 카테고리

    질문 & 답변
  • 세부 분야

    백엔드

  • 해결 여부

    미해결

관계 테이블 저장 오류 관련하여 질문드립니다.

21.08.27 00:17 작성 조회수 159

0

안녕하세요. 강의 정말 잘 듣고 있습니다. 

조회에서 조회가 안 되길래,  로그를 보니, tag 테이블에는 저장되고 있으나,  account와 tag의 관계를 저장하게 되는 account_tags 테이블에 저장을 하지 않는 것을 확인했습니다.  ( 로그에 해당 insert문이 없는 것 확인 )

그래서 accountService.addTag 에서 가장 하단에 accountRepository.save(account);를 추가 해 주니,

해당 테이블에 insert도 정상적으로 되고, 조회도 되는 것을 확인했습니다.

강의 들으며, 동일하게 코딩했다고 생각하고 있습니다만 이러한 차이가 발생하는 것이, 버전이 변경되면서 변경점이 생긴 것인지, 제가 잘못 한 부분이 있는 것인지 판단이 안 되네요.

더불어, 제 코드가 잘못 된 것이라면, 관계 테이블에는 tagRepository에서 save 할 때 같이 저장되는 것인지,

accountService.addTag 메소드의 byId.ifPresent~~~  시점에 저장되는 것인지도 궁금합니다.

그럼 활기찬 나날되세요~

답변 1

답변을 작성해보세요.

0

안녕하세요.

"그래서 accountService.addTag 에서 가장 하단에 accountRepository.save(account);를 추가 해 주니,

해당 테이블에 insert도 정상적으로 되고, 조회도 되는 것을 확인했습니다."

=> 코드를 보고 말씀드리는게 아니라서 정확하진 않지만 혹시 AccountService에 @Transational이라는 애노테이션이 적용되어 있나요? 해당 애노테이션이 없는 경우 객체 변경 내역을 JPA 적용하지 않고 끝냈었다가 이후에 명시적으로 save를 호출해주어 DB에 적용된 것 같은 정황으로 들립니다.

관계 테이블에는 트랜잭션이 끝날 때 account의  tags 객체가 바뀐것을 JPA가 감지하고 insert 쿼리를 발생시킵니다. 정확한 SQL과 SQL 실행 타이밍이 궁금하시다면 디버거를 사용해 보시면 좋습니다.

감사합니다.