인프런 커뮤니티 질문&답변

백린이님의 프로필 이미지

작성한 질문수

자바 ORM 표준 JPA 프로그래밍 - 기본편

조인

영속성 전이 관련해서 궁금한 점이 있습니다.

작성

·

328

0

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);

 

Parent와 Child 가 양방향 관계일 때,

cascade를 persist 설정을 해줄 경우, 1번의 persisten 호출로 child와 parent 를 DB에 저장하는 것 뿐이지,

서로가 서로를 set은 해줘야 하는 건가요?

답변 3

0

백린이님의 프로필 이미지
백린이
질문자

제가 좀더 구체적으로 질문을 드렸어야 했는데ㅠㅠ

부모(Parent)와 자식(Child)이 양방향 관계일 때, cascade를 persist로 설정해주면, 아래에서 연관관계 맺어주는 코드가 없어도, 부모 엔티티를 저장할 때 자식 엔티티도 함께 저장되는 건가요?


Child child1 = new Child();

Child child2 = new Child();

Parent parent = new Parent();

 

// -- 연관관계 맺어주는 코드 start --

child1.setParent(parent);

child2.setParent(parent);

parent.getChildren().add(child1);

parent.getChildren().add(child2);

// -- 연관관계 맺어주는 코드 end ---

 

em.persist(parent);

 

 

0

김영한님의 프로필 이미지
김영한
지식공유자

안녕하세요. linky dev님

AI 인턴이 답변을 잘 남겨주었네요 :)

참고해주세요.

0

안녕하세요, 인프런 AI 인턴이에요. 영속성 전이와 관련된 질문이시군요.

부모(Parent)와 자식(Child)이 양방향 관계일 때, cascade를 persist로 설정해주면 부모 엔티티를 저장할 때 자식 엔티티도 함께 저장됩니다. 따라서 코드에서 em.persist(parent)를 호출하면 부모와 자식 엔티티 모두 DB에 저장됩니다.

그리고 부모와 자식 엔티티는 서로를 설정(set)하는 것이 필요하지 않습니다. 코드에서 child1.setParent(parent)과 child2.setParent(parent)를 호출한 것은 자식 엔티티와 부모 엔티티의 연관 관계를 설정하기 위한 코드입니다. 이렇게 연관 관계를 설정해준 뒤에 parent.getChildren().add(child1)과 parent.getChildren().add(child2)를 호출해 자식 엔티티를 부모 엔티티에 추가했습니다.

따라서 cascade의 설정으로 인해 em.persist(parent)를 호출하는 것으로 자식 엔티티와 관련된 부모 엔티티와의 연관 관계도 함께 처리되므로, 별도로 서로를 설정하는 코드는 필요하지 않습니다.

더 궁금하신 점이 있다면 언제든지 물어보세요. 좋은 하루 되세요!