값타입 컬렉션
값 타입을 Collection에 담아 쓰는걸 말한다.
객체 구조
{Model}
-id : long
-favoriteFoods : set<String>
-addressHistrory : list<Address>
DB 구조
{Member}
-MemberId(pk)
{Favorite_Foor}
-MemberId(fk , pk)
-Food_name(pk)
//두 컬럼을 조합하여 pk로 사용
{Address}
-MemberId(pk , fk)
-City(pk)
-Street(pk)
-Zipcode(pk)
// 컬럼 4개를 묶어서 PK로 사용
값타입 컬렉션은 DB테이블에 넣는게 문제인데
값타입이 하나일때는 class에 속성 하나로 넣으면 됬는데
컬렉션은 DB에 담을 수 있는 구조가 없다.
컬렉션은 기본적으로 1:다 관계라서 DB에 넣기위해선 별도의 테이블로 뽑아야 한다.
값 타입 컬렉션 매핑
Member 객체에서
@Embadded
private Address homdAddress;
//임베디드 타입 필드를 사용
@ElementCollection // 컬렉션을 저장하겟다고 명시
@CollectionTable(name ="FAVORITE_FOOD " , JoinColumns = @JoinColumn(name = "Member_ID"))
//name ="FAVORITE_FOOD " : 컬렉션을 저장할 테이블명을 지정
//JoinColumns = @JoinColumn(name = "Member_ID") : Member테이블과 연결할 fk 컬럼
@Column(name = "Food_name") // 컬렉션에 값이 하나일때 컬럼명 변경가능
Private Set<String> favoriteFoods = new HashSet<>();
@ElementCollection
@CollectionTable(name = "Address" , JoinColumn = @JoinColumn(name = "Member_ID"))
private List<Address> addressHistory = new ArrayList<>();
값타입 컬렉션
-값 타입을 하나 이상 저장할 때 사용
-@ElementCollection , @CollectionTable 사용
-데이터 베이스는 컬렉션을 같은 테이블에 저장할 수 없다.
-컬렉션을 저장하기 위한 별도의 테이블이 필요하다
@ElementCollection // 컬렉션을 저장하겟다고 명시
@CollectionTable(name ="생성할 테이블명 " , JoinColumns = @JoinColumn(name = "FK로 연결한 컬럼명"))
private List<Address> = addressHistory = new ArrayList<>(); // 컬렉션 형태의 필드
'JPA' 카테고리의 다른 글
| 2월 9일 JPA 값타입 컬렉션 조회 예제 지연로딩 전략사용 (0) | 2023.02.09 |
|---|---|
| 2월 7일 JPA 값타입 컬렉션에 값 넣기 (0) | 2023.02.07 |
| 2월 6일 JPA 값타입 비교 (0) | 2023.02.06 |
| 2월 6일 JPA 값타입과 불변객체 (0) | 2023.02.06 |
| 2월 3일 JPA 임베디드 속성의 재정의 (0) | 2023.02.03 |