값 타입 켈력선의 이해와 제약사항
- 값 타입 컬렉션은 엔티티와 다르게 식별자를 가지지 않음.
- 값 타입은 데이터 변경시 원본 데이터를 찾기가 힘듭니다.
- 값 타입 컬렉션이 테이블에 저장되는 경우
- 값의 변경이 있는 경우 원본 데이터를 갱신하기 힘들기에
- JPA 구현체는 값 변경이 있는 경우
- 변경된 데이터를 삭제하고 다시 저장함
실무에서의 값 타입 컬렉션 사용
- 성능 문제로 인해 일대다 관계를 고려해야함
- 또는 엔티티로 그냥 사용하는 방법도 있음
값 타입 컬렉션의 대안
- 값 타입 컬렉션을 사용하는 것이 성능상에 문제가 있는 경우
- 새로운 엔티티를 생성하여 일대다 관계로 설정하는 것이 한 가지 해결책
@Entity
@Setter
@Getter
public class Member {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id;
@Embedded
private Address homeAddress;
// 문자열 집합을 테이블로 매핑
@ElementCollection(fetch = LAZY)
@CollectionTable(name = "FAVORITE_FOODS", joinColumns = @JoinColumn(name = "MEMBER_ID"))
@Column(name = "FOOD_NAME") // 매핑할 컬럼 지정
private Set<String> favoriteFoods = new HashSet<>();
// 일대다로 임베디드타입을 감싸는 형태
@OneToMany(cascade = CascadeType.ALL, orphanRemoval = true)
@JoinColumn(name = "MEMBER_ID")
private List<AddressEntity> addressHistory = new ArrayList<>();
}
@Entity
class AddressEntity {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id;
@Embedded
private Address address;
}
@Embeddable
@AllArgsConstructor
@NoArgsConstructor
class Address {
@Column
private String city;
private String street;
private String zipcode;
}
- 완성되는 테이블 구조
Uploaded by N2T
'자바 > JPA' 카테고리의 다른 글
[JPA] 값 타입 컬렉션 (0) | 2023.11.09 |
---|---|
[JPA] 값 타입 컬렉션 개요 (0) | 2023.11.09 |
[JPA] 객체지향 쿼리 (0) | 2023.11.09 |
[JPA] JPQL 소개 (0) | 2023.11.09 |
[JPA] JPQL 의 기본 문법과 쿼리 API (0) | 2023.11.09 |