jpa 부들... 공부 열심히 해야겠다^^...
팀만들기 완성, 중복확인해서 팀만들고 팀 아이디 유저 정보에 반영하기
우선 내가 오늘 경험한 바에 의하면 Transactiona 어노테이션은 sql에서 c, u, d 같이 db와 관련된 서비스 클래스 혹은 메소드에 쓴다. @Transaction이 붙으면 메소드에서 실행되는 작업 중에 하나라도 오류가 나면 전체 작업을 취소한다. 이건 트랜잭션의 4가지 성질때문인데 자세한 내용은 차차 공부해야겠다.
그리고 영속성 컨텍스트는 전에 한번 찾아봤던 것 같은데... 아무튼 JPA에 대한 내 부족한 지식때문에 겪었던 문제를 오늘 해결했다. 팀을 만들면 만들어진 팀의 id가 user정보에 들어가야하는데 팀만 만들어지고 저장되지 않은게 문제였다.
이유는 영속성 컨텍스트에 대해 잘 몰랐기 때문이고... 영속성 컨텍스트 자체는 entity를 영구 저장하는 환경이다. application과 database사이에서 객체를 보관하는 가상의 데이터베이스 역할인데 entity 매니저를 통해 저장하고 조회하면 매니저가 영속성 컨텍스트에 entity를 보관하고 관리한다.
영속성 컨텍스트 내부에는 캐시가 있는데 이를 1차 캐시라고 한다. 팀 id가 user에 들어가지 않았던 이유도 user.setTeam으로 1차캐시에만 넣어주고 db에 그걸 저장하지 않아서 계속 Null만 나왔다. 해결하니 얼마나 속이 시원하던지. 근데 결국 튜터님의 도움을 받은게 아쉽다. 영속성 컨텍스트라는 키워드를 찾지 못해서 결국 도움을 받게 됐다... 다음에 또 이렇게 모르는게 생기면 튜터님께 질문해서 키워드를 잘 찾아서 혼자 해결하는 능력을 길러야겠다!
@Transactional
public Team createTeam(TeamRequestDto teamRequestDto, User user) {
...
Team team = new Team(teamname);
teamRepository.save(team);
user.setTeam(team);
userRepository.save(user);
}
성공적으로 team id가 들어갔다!
내일은 팀 to do list를 해야지 모레는 출석 현황 글피는 팀 초대...ㅎ to do list를 반영한 progress bar는 일단 제일 마지막에...