질문&답변
@Transactional을 붙이는 위치가 궁금합니다. (Service, ServiceImpl..)
스프링 빈으로 어떤게 등록되는지 생각해보시면 될 거 같아요. 인터페이스는 타입을 정의 하는 것이고(DIP, OCP를 위해서..) 실제로 스프링에 등록되는 빈 객체는 구현체인 Impl입니다. 영한님의 스프링 로드맵을 한번 들어보시면 이해가 되실 것 같습니다.
- 좋아요수
- 0
- 댓글수
- 1
- 조회수
- 412
질문&답변
스프링 빈으로 어떤게 등록되는지 생각해보시면 될 거 같아요. 인터페이스는 타입을 정의 하는 것이고(DIP, OCP를 위해서..) 실제로 스프링에 등록되는 빈 객체는 구현체인 Impl입니다. 영한님의 스프링 로드맵을 한번 들어보시면 이해가 되실 것 같습니다.
질문&답변
(질문해주신 코드는 오류가 날 것 같은데.. 오류 로그는 안나오시나요?) findMember.getTeam().setId(2L); findMember.setTeam(team2);
질문&답변
양방향 연관관계에서 연관관계의 주인은 외래키를 관리하고, 아닌 쪽은 조회만 가능합니다. Parent에서 아무리 child를 add해도 외래키 값은 저장되지 않습니다. 영속성 전이( cascade )는 특정 엔티티의 영속성(persist, remove, detach 등등..)을 수정할 때 연관된 엔티티도 같이 수정하겠다는 뜻입니다. @OneToMany (mappedBy = "parent" , cascade = CascadeType.PERSIST) 위 코드를 보시면 연관관계 주인은 Child클래스의 parent이고, Parent클래스를 영속화할 때 Child도 같이 영속화 하겠다는 뜻입니다. 올려주신 코드를 보면 child1, child2객체(각각 연관관계의 주인입니다.)에 parent를 set해주므로 외래키가 저장되는 것이며, parent객체(영속성 전이)를 영속화할때 child1, child2객체가 모두 영속화되어 결과적으로 DB에는 총 3개의 데이터(parent, child1, child2)가 INSERT됩니다. child1.setParent( parent ) ; //연관관계 추가 child2.setParent( parent ) ; //연관관계 추가 위 코드를 삭제하시면 연관관계의 주인에 연관관계가 세팅되지 않으므로 외래키값은 null로 입력되는 것을 확인할 수 있으실겁니다.