JPA

영속성 전이에 관해(부제 : CASCADE)

쿠카이든 2022. 6. 11. 11:57
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