값 컬렉션 HashSet 타입인 favoriteFoods를 수정할 때 궁금한 것이 있습니다.
297
작성한 질문수 61
<Member 클래스>
@ElementCollection
@CollectionTable(name = "FAVORITE_FOOD", joinColumns =
@JoinColumn(name = "MEMBER_ID")
)
@Column(name = "FOOD_NAME") // 값이 하나라 가능
private Set<String> favoriteFoods = new HashSet<>();<JpaMain 함수>
try {
Member member = new Member();
member.setUsername("member1");
member.setHomeAddress(new Address("homeCity", "street", "10000"));
member.getFavoriteFoods().add("치킨");
member.getFavoriteFoods().add("족발");
member.getFavoriteFoods().add("피자");
member.getAddressHistory().add(new Address("old1", "street", "10000"));
member.getAddressHistory().add(new Address("old2", "street", "10000"));
em.persist(member);
em.flush();
em.clear();
System.out.println("=========== START ===========");
//todo: 값 타입 수정
Member findMember = em.find(Member.class, member.getId());
Address a = findMember.getHomeAddress();
findMember.setHomeAddress(new Address("newCity", a.getStreet(), a.getZipcode()));
// HashSet이라서 set 메서드 활용 불가
findMember.getFavoriteFoods().remove("치킨");
findMember.getFavoriteFoods().add("한식");
tx.commit();위의 메인함수를 여러 번 실행했는데 HashSet임에도 불구하고 순서가 지켜진 체로 DB에 저장된 결과가 다음과 같습니다.

그러나, em.flush()와 em.clear()를 주석처리하고 다시 실행해보면 DB로 조회할 때 순서가 지켜지지 않고 무작위로 저장이 됩니다. 제 예상은 em.flush()가 add()로 저장된 컬렉션 값을 먼저 DB에 반영하니까 순서가 보장되서 항상 같은 결과가 나오지 않나 생각됩니다. 이것이 맞나요?
답변 2
2
안녕하세요. Ambition님
이 부분은 프로그래밍의 여러 요소로 인해서 같은 내용의 경우 순서가 보장되는 것 처럼 보일 수는 있습니다.
하지만 결과적으로 다른 데이터가 들어가거나, 프로그램의 버전 등 상황이 변하면 언제든지 순서가 변경될 가능성이 있습니다.
따라서 HashSet을 사용할 때는 순서가 보장되지 않는다고 생각하셔야 합니다.
감사합니다.
0
안녕하세요, 인프런 AI 인턴입니다.
질문하신 내용과 관련된 유사한 질문의 답변을 찾았습니다. HashSet은 순서를 보장하지 않는 자료구조임에도 불구하고 결과가 순서대로 나온다는 것과 관련하여, 질문에 답변한 내용이 도움이 될 것 같습니다.
질문 제목: 값타입 컬렉션 질문 있습니다 21분 50초
질문 링크: https://www.inflearn.com/questions/817247
강의 수강 시 궁금한 내용이 있을 때는 질문&답변 게시판을 활용하시면 좋습니다. 해당 링크를 방문하셔서 더 자세한 내용을 확인해 보시기 바랍니다.
inheritance startegy 선택시 고려사항
0
11
0
Entity 동등성 비교
0
14
1
실무 조언 관련 질문입니다.
0
41
1
H2데이터베이스 파일 생성
0
52
2
서브쿼리 강의에서 ALL 예시 관련 질문드립니다.
0
49
2
수정또는 삭제시 영속성 엔티티에 값이 무조건 있어야 하나요?
0
48
1
JPQL 메소드와 락
0
53
1
Delivery @OneToOne
0
57
1
17강 4~5분대 테이블 값 조회가 안됩니다.
0
89
2
UnsupportedOperationException 발생
0
82
3
H2 Database 연결이 안됩니다.
0
89
2
연관관계 매핑 질문드립니다.
0
82
2
h2데이터베이스 실행오류
0
105
2
persistence.xml
0
103
2
양방향 연관관계에서 연관관계의 주인(mappedBy)을 왜 꼭 정해야 하나요?
0
77
1
영속성 컨텍스트
0
62
1
JPA 프록시
0
90
1
Native Query와 MyBatis
0
63
1
영속성 컨텍스트는 어떤 메모리에 저장되는건가요?
0
84
1
임베디드 타입 예시 코드 관련 질문
0
112
3
명시적 조인에서 별칭을 주면 왜 객체에 접근할 수 있나요
0
91
3
인텔리제이 패키지 커서 단축키 질문
0
106
2
혹시 현재는 ID 데이터 타입이 String이면 안되나요?
0
138
1
양방향 연관관계 시 연관관계 주인을 설정하는 이유
0
68
1





