값 타입 컬렉션 정말 쓰면 안되나요??
508
작성자 없음
안녕하세요 영한님! 질문이있어서 찾아왔습니다.
현재 프로젝트를 진행중인데
한줄로 요약하면 기준 영양 성분에 맞추어 부족,과잉 영양분을 판별해 주는 프로젝트입니다.
저는 기준 영양성분을 ENUM 타입으로 관리하자는 입장이였습니다.
그 이유는
1) 저희 서비스는 적정영양성분 부족과잉을 판별 하는데 매번 DB를 조회해서 findProperAmountByName("단백질") 을 매번 같은 적정량을 조회하는 게 부담스럽다.
=> Enum 타입으로 탄수화물의 적정량을 넣어두면 훨씬 편하게 조회할 수 있을 것이다.
2) findProperAmountByName("단백질") 은 현재 코드만으로는 DB에 어떤 영양소가 있는지도 모르고 확인하기 어렵다. ENUM 타입으로 묶으면 CARBON_HYDRATE,PROTEIN 등등 이렇게 묶어서 편하게 관리할 수 있다.
이렇게 생각하고 또 개발을 진행중에 있었습니다.
그러던 와중에 "영양제" 라는 컨텐츠에 탄수화물, 단백질 이 부족할 때 좋은 영양제라는 의미로 "탄수화물","단백질" 이라는 키워드를 쓰고 싶을 때
<아래는 영양제 칼럼>
@ElementCollection(targetClass = StandardNutrient.class)
@JoinTable(name = "StandardNutrient",joinColumns = @JoinColumn(name = "drug_id"))
@Column(name ="StandardNutrientName", nullable = false)
@Enumerated(EnumType.STRING)
private Set<StandardNutrient> efficientNutrient = new HashSet<>();이렇게 쓰고 싶은 마음이 굴둑 같습니다.
이렇게 했을 때 발생할 수 있는 단점에 대해 알고 싶습니다. (StandardNutrient는 Enum 타입입니다. )
1) 일단 StandareNutrient 의 종류가 바뀔일이 절대 없습니다!
2) 이 서비스의 Manager 만 영양제를 등록할 수 있습니다.
3) List 대신 Set 을 사용함으로써 다 delete 한이후 insert 하지도 않습니다.
어떻게 생각하시나요?
답변 1
0
안녕하세요, 인프런 AI 인턴입니다. dionisos198님의 질문에 대해 유사한 상황을 다룬 지식공유자의 답변을 찾아보았습니다.
dionisos198님께서 직면하신 문제는 Enum과 값 타입 컬렉션(@ElementCollection)의 사용에 관한 고민으로 보입니다. 특히, Enum을 사용하여 영양소의 적정량을 관리하고자 하는 상황에서 발생할 수 있는 이점과 단점, 그리고 구현 방법에 대한 고민이 있으신 것 같습니다.
해당 주제와 밀접한 내용을 다룬 답변으로는 김영한님의 다음 답변을 추천드립니다:
- Enum 타입을 활용한 값 타입 컬렉션 처리 관련 질문 에 대한 김영한님의 답변에서는 Enum을 활용할 때 고려해야 할 사항과 JPA에서의 관리 방법에 대해 설명하고 있습니다. 특히, Enum 컬렉션을 다룰 때
@ElementCollection사용과 관련된 최적화 방안과 실무에서의 적용 방식에 대한 조언이 포함되어 있어 유익할 것입니다.
이 답변에서 다루고 있는 핵심적인 내용은 다음과 같습니다:
- Enum과 @ElementCollection 사용 시 고려할 사항: Enum 타입을 사용할 때 데이터 변화가 잦지 않고, 정해진 범위 내에서 관리되어야 하는 경우 유용하게 사용할 수 있습니다. 하지만 Enum 값이 변경되거나 확장될 때는 다소 유지 보수적인 측면에서 고민이 필요할 수 있습니다.
- 값 타입 컬렉션의 단점과 해결 방법: 값 타입 컬렉션을 사용할 때 발생할 수 있는 문제점과 이를 최적화하기 위한 전략에 대해 설명합니다. 특히, @ElementCollection을 사용할 때 발생할 수 있는 성능 문제와 이를 해결하기 위한 접근법에 대해 조언하고 있습니다.
김영한님은 JPA의 이해와 실무 적용에 관한 다양한 조언을 제공하시기 때문에, dionisos198님의 경우와 관련된 고민에 도움이 될만한 통찰을 얻을 수 있습니다.
저는 질문자님의 이해를 돕고자 지식공유자님의 기존 답변을 참고하여 유사한 답변 링크를 추천해드리고 있습니다.
현재 베타 기능으로 답변이 만족스럽지 않을 수 있는 점 양해 부탁드립니다. 🙏
추가적으로 궁금한 점이 있으시면, 이어서 질문해 주세요. 곧 지식공유자께서 답변해 주실 것입니다.
변경감지(더티체킹) 이후 플러시할 경우의 쿼리
0
16
1
단일 테이블 시 null 값과 연관관계 필요성 질문
0
32
1
벌크연산에서 member.getAge 호출 시 영속성 컨텍스트에서 데이터를 가져오는건가요?
0
67
2
inheritance startegy 선택시 고려사항
0
45
1
Entity 동등성 비교
0
51
1
실무 조언 관련 질문입니다.
0
74
1
H2데이터베이스 파일 생성
0
85
2
서브쿼리 강의에서 ALL 예시 관련 질문드립니다.
0
71
2
수정또는 삭제시 영속성 엔티티에 값이 무조건 있어야 하나요?
0
68
1
JPQL 메소드와 락
0
65
1
Delivery @OneToOne
0
78
1
17강 4~5분대 테이블 값 조회가 안됩니다.
0
109
2
UnsupportedOperationException 발생
0
113
3
H2 Database 연결이 안됩니다.
0
106
2
연관관계 매핑 질문드립니다.
0
104
2
h2데이터베이스 실행오류
0
124
2
persistence.xml
0
132
2
양방향 연관관계에서 연관관계의 주인(mappedBy)을 왜 꼭 정해야 하나요?
0
97
1
영속성 컨텍스트
0
83
1
JPA 프록시
0
113
1
Native Query와 MyBatis
0
88
1
영속성 컨텍스트는 어떤 메모리에 저장되는건가요?
0
108
1
임베디드 타입 예시 코드 관련 질문
0
137
3
명시적 조인에서 별칭을 주면 왜 객체에 접근할 수 있나요
0
106
3





