게시글
질문&답변
2024.04.26
@Transactional을 붙이는 위치가 궁금합니다. (Service, ServiceImpl..)
스프링 빈으로 어떤게 등록되는지 생각해보시면 될 거 같아요. 인터페이스는 타입을 정의 하는 것이고(DIP, OCP를 위해서..) 실제로 스프링에 등록되는 빈 객체는 구현체인 Impl입니다. 영한님의 스프링 로드맵을 한번 들어보시면 이해가 되실 것 같습니다.
- 0
- 1
- 218
질문&답변
2024.01.07
양방향 관계에서
(질문해주신 코드는 오류가 날 것 같은데.. 오류 로그는 안나오시나요?) findMember.getTeam().setId(2L); findMember.setTeam(team2);
- 0
- 1
- 239
질문&답변
2024.01.06
연관관계 주인과 cascade가 상충되는 상황에 대해서
양방향 연관관계에서 연관관계의 주인은 외래키를 관리하고, 아닌 쪽은 조회만 가능합니다. 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로 입력되는 것을 확인할 수 있으실겁니다.
- 0
- 1
- 387