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

galid님의 프로필 이미지
galid

작성한 질문수

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

값 타입 컬렉션 제약사항에 질문있습니다!

작성

·

319

0

안녕하세요! 책을 보며, 값 타입 컬렉션을 공부중에 질문이 생겼습니다.

값타입 컬렉션에는 ID가 존재하지 않기 때문에,
변경시 모든 값을 제거한 뒤,
해당 데티어를 제외한 모든 값을 다시 집어넣는 쿼리가 발생한다는 부분을 보고있는데요,

예를들어 Member 엔티티가 있고, List<Item> 이라는 값타입 컬렉션을 Member 엔티티가 가지고 있을때, 아래와 같이 테이블이 생성이 되는데요,

Member                    Member_Item

id   name               name  member_id(foreign key)

1         A                    i1              1

2         B                    i2              1

이때 member: 1 이 소유한 i1 아이템을 제거한다고 했을때. 
쿼리가 
delete
from member_item
where member_id = 1 and name = 'i1'; 
이렇게 발생하면 되지 않나요 ??

왜 모든 값을 지우고 다시 저장해야만 할까요?...

답변 5

1

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

네 잘 이해하셨습니다^^

1

galid님의 프로필 이미지
galid
질문자

답변 감사드립니다.

다시 질문을 작성하는 중에 확실히 이해가 되었습니다.

Member                    Member_Item

id   name               name  member_id(foreign key)

1         A                    i1              1

2         B                    i1              1

                                i2              1

위와 같은 상황에서 i1을 지운다고하면, 모든 i1에 해당하는 row가 지워지기 때문에.

우선, N개에 해당하는 i1의 row를 모두 지우고, 다시 N-1개에 해당하는 i1의 데이터를 삽입하는 과정이 이루어지는 것으로 이해되었습니다.

정말 감사드립니다. 😀

1

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

안녕하세요. galid님

두번 다시 질문주신 부분이 잘 이해가 안되어서요. 예시를 들어서 말씀해주시면 좋겠습니다^^

1

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

안녕하세요. galid님 좋은 질문입니다.

문제는 name이 Unique하지 않기 때문입니다.

Member                    Member_Item

id   name               name  member_id(foreign key)

1         A                    i1              1

2         B                    i1              1

                                  i2              1

이렇게 되어 있으면 나는 i1 하나만 지웠다고 생각했는데, 실제로는 2개가 한번에 제거되겠지요?

실무에서는 이런 다양한 문제들 때문에 값 타입 컬렉션은 정말 단순한 경우에만 사용하고, 대부분은 책의 마지막에 설명하는 것 처럼 값 타입을 엔티티로 변경해서 사용합니다.

도움이 되셨길 바래요^^

0

galid님의 프로필 이미지
galid
질문자

답변 감사드립니다!!
유니크 하지 않아서 그렇다는 것은 이해가 됬는데요 다시 질문이 생겼습니다.

그렇다면 모두 지우고 다시 삽입하는 방법으로 어떻게 한 행만 지워질 수 있는 것인가요??

모든 행을 지우고 다시 삽입하는 것이 아니라,
조건에 해당하는 유니크 하지 않은 데이터만을 모두 삭제한 뒤에 다시 삽입하도록 구현할 수도 있지 않았을까요?

왜그런지 너무 궁금합니다 ㅠ...

galid님의 프로필 이미지
galid

작성한 질문수

질문하기