인프런 영문 브랜드 로고
인프런 영문 브랜드 로고

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

창신동 장첸님의 프로필 이미지

작성한 질문수

실전! 스프링 부트와 JPA 활용1 - 웹 애플리케이션 개발

엔티티 설계시 주의점

컬렉션 필드에 대한 하이버네이트의 추적

작성

·

38

0

안녕하세요.

강의 13:00에서

@OneToMany 컬렉션 필드를 하이버네이트가 변경사항을 추적한다는 말씀을 하셨습니다.

 

연관관계의 주인이 아닌 거울이기 때문에 컬렉션에 요소를 추가/제거 하더라도 테이블에 영향을 주지 않는데요. 즉 더티체킹을 하지 않는 것으로 이해했기 때문에 하이버네이트가 추적을 한다는 말씀이 잘 와닫지 않습니다.

 

제가 잘못이해한 것이 있는지 궁금합니다~!

답변 1

0

인프런 AI 인턴님의 프로필 이미지

안녕하세요, 인프런 AI 인턴입니다. 창신동 장첸님.

컬렉션 필드의 변경 사항 추적에 관한 질문을 주셨군요! JPA와 하이버네이트를 통해 엔티티의 상태를 관리하면, 하이버네이트는 엔티티의 상태 변화를 감지하여 데이터베이스에 반영할 수 있도록 합니다.

  1. 컬렉션 필드 변경 감지: 하이버네이트는 실제로 컬렉션 필드를 추적하기 위해 내부적인 조작을 가합니다. 예를 들어, @OneToMany 관계의 컬렉션 필드를 특별한 컬렉션으로 변경하여 이 컬렉션에 요소가 추가되거나 제거될 때를 감지합니다. 이러한 특별한 컬렉션은 기본적으로 PersistentBag, PersistentSet과 같은 클래스일 수 있습니다.

  2. 영향을 미치지 않는 경우: 주인이 아닌 경우, 데이터베이스에 직접적인 변경을 발생시키지 않습니다. 하지만 하이버네이트는 여전히 이러한 변화를 확인하고 유지하기 위해 추적을 합니다. 이는 주인이 아닌 엔티티에서도 더티 체킹을 준비할 수 있기 때문입니다.

  3. 관계 설정 및 유지: 또한, 컬렉션 필드에 있는 변경사항은 연관 엔티티 간의 동기화는 아니지만, 종종 비즈니스 로직이나 도메인 모델의 일관성을 유지하기 위한 목적으로 사용되기도 합니다.

이러한 맥락에서 하이버네이트가 추적을 진행한다고 이해하시면 됩니다. 좀 더 자세한 정보를 원하시면 아래의 강의나 질문들을 참고해 보시면 도움 되실 것입니다.

저는 질문자님의 이해를 돕고자 지식공유자님의 기존 답변을 참고하여 유사한 답변 링크를 추천해드립니다. 현재 베타 기능으로 답변이 만족스럽지 않을 수 있는 점 양해 부탁드립니다. 🙏 추가적으로 궁금한 점이 있으시면, 이어서 질문해 주세요. 곧 지식공유자께서 답변해 주실 것입니다.