@Embeddable
public class Period {
private LocalDateTime startDate;
private LocalDateTime endDate;
}
JPA의 타입 분류
- 엔티티 타입 : @Entity
- 값 타입 : int, Integer, String 처럼 자바 타입 객체
값타입
- 기본 값타입
- 기본타입 : int, double
- 래퍼 클래스 : Integer, Long
- String
-
- 기본 생성자 필수임베디드 타입 : JPA는 임베디드 타입
- 컬렉션 값 타입 : 컬렉션을 새로운 테이블로 만듦
- 기본키를 사용할 수 없어서, 이 대신 1:N 엔티티를 생성하자
@ElementCollection // 기본값으로 LAZY이다. @CollectionTable(name = "FAVORTIE_FOOD", joinColumns = @JoinColumn(name = "MEMBER_ID")) private Set<String> favoriteFoods = new HashSet<>();
- remove : 주인 엔티티와 연관된 모든 데이터 삭제 후, 현재 데이터를 다시 저장한다.
- 언제쓰는가?
- SELECT BOX가 있고, 체크할 수 있을 때. UPDATE가 필요없을 때
1. 값 타입의 한계
- 값을 복사해서 대입하는 문제(side effect 발생 가능성)
- Address a = new Address("old"); Address b = a; b.setCity("new");
- 객체의 공유 참조는 피할 수 없다.
2. 해결방법 : 불변객체
- setter를 만들지 않는다.
- 생성자로만 값을 설정한다.
'공부 > Spring' 카테고리의 다른 글
[JPA] 페치 조인 (0) | 2022.07.18 |
---|---|
[JPA] 쿼리 문법 (0) | 2022.07.18 |
[JPA] 프록시와 연관관계 관리(지연로딩) (0) | 2022.07.02 |
[JPA] 다양한 연관관계 매핑 (0) | 2022.07.02 |
[JPA] 연관관계 매핑 기초 (0) | 2022.07.02 |
댓글