@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를 만들지 않는다.
- 생성자로만 값을 설정한다.
댓글