반응형
지난 게시물에 이어 이번에는 N:1 단방향을 알아보자.
각설하고 바로 예제부터 보자.
Team(1) : Member (N) 으로 아래와 같이 구성되어있다.
@Builder
@Data
@NoArgsConstructor
@AllArgsConstructor
@Entity(name = "TEAM")
public class Team {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
@Column(name = "team_id")
private Long id;
private String name;
}
~중략
public class Member {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
@Column(name = "member_id")
private Long id;
private String name;
@ManyToOne(cascade = CascadeType.ALL)
@JoinColumn(name = "team_id")
private Team team;
}
멤버와 팀 N:1로 단방향으로 매핑한다.
여기서 유심히 봐야할 부분은 cascade 옵션이다.

설명하자면 Entity 객체가 생성,삭제,수정 등이 일어날 때 연관관계에 있는 Entity도 같이 영향을 받는다는건데.
아래 더 자세하게 잘 설명해둔 글을 보도록 하자.
casecade 옵션
- CascadeType.PERSIST
- 엔티티를 영속화 할 때 연관된 엔티티도 함께 유지 (* PERSIST의 예상치 못한 동작)
- 연관 엔티티가 DB에 이미 저장이 되어있어도 다시 persist하기 때문에
detached entity passed to persist Exception
이 발생함(이경우에는 CascadeType.MERGE를 사용)
- CascadeType.MERGE
- 엔티티 상태를 병합 할 때, 연관된 엔티티도 함께 병합
- 트랜잭션이 종료되고 detach 상태에서 엔티티가 merge()를 수행하게 되면 연관 엔티티의 추가 및 수정사항도 함께 적용됨
- CascadeType.REFRESH
- 엔티티를 새로 고칠 때, 연관된 엔티티도 새로고침
- CascadeType.REMOVE
- 엔티티를 삭제할 때, 연관된 엔티도 함께 삭제
- CascadeType.DETACH
- 부모 엔티티가 detach()를 수행하게 되면, 연관된 엔티티도 detach() 상태가 되어 변경사항이 반영되지 않음
- CascadeType.ALL
- 모든 Cascade 적용
출처: https://prohannah.tistory.com/132 [Hello, Hannah!:티스토리]
그럼 계속해서 부모1 자식2 를 만들어 테스트를 진행해보자
테스트는 아래와 같이 진행한다.
@ExtendWith(SpringExtension.class)
@SpringBootTest
@Transactional
public class N1ProblemTest {
@Autowired
TeamRepository rpTeam;
@Autowired
MemberRepository rpMember;
@Test
public void test__() {
System.out.println("영속성 전이를 통한 insert start");
Team team = Team.builder().name("name of team").build();
Member member1 = Member.builder()
.name("name of member1")
.team(team)
.build();
Member member2 = Member.builder()
.name("name of member2")
.team(team)
.build();
rpMember.saveAll(Arrays.asList(member1, member2));
System.out.println("팀 전체 -------------------- ");
rpTeam.findAll();
System.out.println("멤버 전체 -------------------- ");
rpMember.findAll();
}
}
member를 save 하면서 team이 생성된다.
굿, 잘 만들어졌다.
반응형
'개발 > JAVA' 카테고리의 다른 글
JPA N+1, pageable, projection. (0) | 2022.10.28 |
---|---|
JPA n+1 정리 page, projection. (0) | 2022.10.27 |
JPA 1:N 양방향 맵핑 (0) | 2022.10.26 |
JPA 1:N 단방향 맵핑 (0) | 2022.10.26 |
Tomcat 에 사설 SSL 적용하기 (https 적용) (2) | 2018.02.13 |
댓글