경주장

영속화 옵션 예시 본문

JPA

영속화 옵션 예시

달리는치타 2022. 1. 6. 15:17

Team의 Member Entity에 영속성 전이 옵션에 PERSIST를 넣으면 

팀만 persist해도 member가 모두 persist된다.

 

@Entity
public class Team{

 ...
  @OneToMany(mappedBy = "team", cascade = PERSIST)
  private List<Member> members = new ArrayList<>();
  
  ...
 }

 

해당 옵션을 제거하면 Member는 삽입되지 않는다.

cascade = PERSIST 옵션이 들어가 있을때에도 

Insert 쿼리는 em.flush( )를 호출하는 시점에 발생하기 때문에

팀의 참조를 영속화하는 em.persist(team1), em.persist(team2)의 호출 시점은 team 생성 직후 여도 상관없다.

 

멤버를 삽입해서 팀을 영속화 해보자

@Entity
public class Member {
...
@ManyToOne(fetch = LAZY, cascade = PERSIST)
    @JoinColumn(name = "team_id")
    private Team team;
 ...
 
 }

 

 

 

1:N의 관계에서 어느쪽에 두어도 예상한 대로 동작하는 것을 확인 할 수 있다.

 

하지만 일반적으로 생각하기 편하게 팀을 삽입할때 관련된 모든 멤버를 삽입하는 것이 더 생각할 요소들이 적을 것이다.

'JPA' 카테고리의 다른 글

JPQL 예시와 N+1문제, 단일 값, 컬렉션 값 조인  (0) 2022.01.06
JPQL - 기본 문법  (0) 2022.01.05
값 타입  (0) 2022.01.05
프록시와 연관관계 관리  (0) 2022.01.04
고급 매핑  (0) 2022.01.04