작성
·
2.2K
1
예전에는 service단에서 trasaction을 걸어서 했었는데
repository에 기본적으로 @trasantional이 적용되어있나요??
그렇기 때문에 db에서 쿼리를 해올수잇는건지 궁금합니다 ㅎㅎ
추가적으로 repository에 transation이 걸려있다면 왜 service 클래스에 이중으로 @trasational 어노테이션을 거는건가요?
답변 1
2
안녕하세요. 원석나님, 공식 서포터즈 OMG입니다.
아래의 링크들의 질문과 답변 상황을 보시면 이해하시리라 생각합니다.
추가적으로 궁금한 점이 있으시면 댓글 남겨주세요.
레포지토리에 @Transactional을 안붙이는 이유 - 인프런 | 질문 & 답변 (inflearn.com)
컨트롤러에서 레파지토리 호출시 트랜잭션은? - 인프런 | 질문 & 답변 (inflearn.com)
감사합니다.
아!!! 조회할때는 아에 필요가없고 변경시에는 꼭 필요하군요 !!
링크 달아주신 부분에서 강사님께서 "단순저장" 역시 필요없다 하셨는데
영속컨텍스트에 들어가서도 변경될 사항이 없이 그냥 순순히 저장되는 형태 일 경우 트랜젝션이 필요없을까요 ??
예를들어 Member에서 연관관계 없이 순순히 Member만 저장시킨다 할 경우 입니다!
감사합니다 !!!
말씀하신데로 직접 엔티티를 생성하여 스프링없이 순수jpa로만 해본결과
연관관계가 있는 엔티티던 아에 연관관계가 없는 엔티티던 저장시에는 트랜젝션이 필요하다 라는 결론이 나왔습니다
저도 같은 결론을 도출했습니다.
영한님께서 말하는 '단순 저장'은 비영속 객체의 멤버변수의값을 저장하는 단순 저장을 얘기하시는것 같습니다.
참고로 SpringDataJPA의 경우 JpaRepository의 구현체에 @Transactional(readonly=true)가 걸려있어 저장시에 transactional이 필요없어 보일 수 있습니다만 트랜잭션 선언이 되어 있습니다.
아직 스프링데이터JPA 수강하지 않으셨나보네요 ㅎㅎ
하트수가 많은 건 아니지만 좋아요 순 1등으로서(?) 말씀드리면
영한님께서 왜 순수 JPA부터(밑바닥부터) 강의 구성을 시작했고 이후 SpringDataJPA로 넘어와 강의를 진행하시는지 감동을 느껴보시면 좋겠습니다 ㅎㅎ
답변 너무나 감사드립니다 !!!
링크달아주신 글 보면서 또 다른 질문이 생겼는데요
jpa가 동작할때 트랜젝션을 만나면 flush가 이루어지고 다음에 db에 트랜젝션을 실행하잖아요?
조회의 경우는 트랜젝션이 아에없어도 jpa가 동작을 하는건가요??
지금 같은경우는 트랜젝션없이 동작하고 있어서 급 헷갈리기 시작했습니다.. ㅋㅋ