특정 엔티티를 영속 상태로 만들 때, 연관 엔티티를 함께 영속 상태로 만들고 싶은 경우 영속성 전이를 사용하면 된다.
JPA 에서는 CASCADE 옵션으로 사용할 수 있다.
즉, CASCADE 설정으로 부모 엔티티를 저장할 때 자식 엔티티도 함께 저장할 수 있다.
아래 Team 과 Member의 엔티티를 보자.
@Getter
@Setter
@Entity
public class Team {
@Id
@GeneratedValue
private String teamId;
@OneToMany(mappedBy = "team", cascade = CascadeType.PERSIST)
private List<Member> member = Lists.newArrayList();
}
@Getter
@Setter
@Entity
public class Member {
@Id
@GeneratedValue
private Long memberId;
@Column(name = "memberName")
private String memberName;
@ManyToOne(fetch = FetchType.LAZY)
@JoinColumn(name = "teamId")
private Team team;
}
Team에 영속성 전이 설정을 해놓았다.
이때,
Team team = new Team();
Member member1 = new Member();
Member member2 = new Member();
member1.setTeam(team);
member2.setTeam(team);
team.getMember().add(member1);
team.getMember().add(member2);
entityManager.persist(team);
위 코드에서 처럼 team만 persist 하여도, CascadeType.PERSIST로 설정한 자식 엔티티까지 함께 영속화 해서 저장한다.
영속성 전이는 연관관계를 매핑하는 것과는 아무 관련이 없다 -> 연관 엔티티도 같이 영속화 한다는 것뿐이다.
CASCADE에는 다양한 옵션이 있다. 어떤 상황에서 영속성을 전이 시킬지에 대한 옵션이다
ALL(모두 적용)
PERSIST(영속화시)
MERGE(병합시)
REMOVE(삭제시)
REFRESH(refresh)
DETACH(detach)
참고) PERSIST, REMOVE는 entityManager.persist(), remove()를 실행할 때가 아닌 플러시를 호출할때 전이가 일어남
'Development > DB, JPA' 카테고리의 다른 글
Persistence Context 영속성 컨텍스트 (0) | 2017.03.12 |
---|---|
트랜잭션, 트랜잭션 격리수준(Isolation Level) (0) | 2016.12.30 |
@MappedSuperclass 에 관하여 ... (0) | 2016.08.10 |
Lazy Exception 과 Hibernate.initialize() (0) | 2016.07.26 |
지연로딩과 즉시로딩 (0) | 2016.07.17 |