728x90
- 특정 엔티티를 영속 상태로 만들 때 연관된 엔티티도 함께 영속 상태로 만들고 싶으면 영속성 전이(transitive persistence) 기능을 사용하면 된다.
- JPA는 CASCADE 옵션으로 영속성 전이를 제공한다.
@Entity
public class Parent { //부모 엔티티
@Id @GeneratedValue
private Long id;
@OneToMany(mappedBy = "parent")
private List<Child> children = new ArrayList<Child>();
...
}
@Entity
public class Child { // 자식 엔티티
@Id @GeneratedValue
private Long id;
@ManyToOne
private Parent parent;
...
}
- JPA에서 엔티티를 저장할 때 연관된 모든 엔티티는 영속 상태여야 한다. 이럴 때 영속성 전이를 사용하면 부모만 영속 상태로 만들면 연관된 자식까지 한 번에 영속 상태로 만들 수 있다.
@Entity
public class Parent { //부모 엔티티(변경 후)
...
@OneToMany(mappedBy ="parent", cascade = CascadeType.PERSIST)
private List<Child> children = new ArrayList<Child>();
...
}
- 부모를 영속화할 때 연관된 자식들도 함께 영속화하라고 cascade = CascadeType.PERSIST 옵션을 설정했다.
private static void saveWithCascade(EntityManager em) { //저장 코드
Child child1 = new Child();
Child child2 = new Child();
Parent parent = new Parent();
child1.setParent(parent); //연관관계 추가
child2.setParent(parent); //연관관계 추가
parent.getChildren().add(child1);
parent.getChildren().add(child2);
//부모 저장, 연관된 자식들 저장
em.persist(parent);
}
- 부모만 영속화하면 CascadeType.PERSIST로 설정한 자식 엔티티까지 함께 영속화해서 저장한다.
출처 : 자바 ORM 표준 JPA 프로그래밍(김영한 저)
728x90
'JPA' 카테고리의 다른 글
연관관계 편의 메소드(part.1) (0) | 2022.06.12 |
---|---|
고아 객체(feat. orphanRemoval) (0) | 2022.06.12 |
상속관계 매핑 전략(@DiscriminatorColumn 란?) (0) | 2022.06.05 |
(JPA) Error attempting to apply AttributeConverter 에러 관련 글(feat. @Converter 사용시) (0) | 2022.03.26 |
JPA에서 pageable을 통해 Paging 간단하게 구현하는 법 (0) | 2022.03.22 |