1. 기본값 타입
- 기본 타입 : int, double
- 래퍼 클래스 : Integer, Long
- String
2. 임베디드 타입 (복합 값 타입)
새로 값 타입을 만든다.
- ex) city, street, zipcode => Address 라는 값타입으로 만드는 것.
as-is | to-be | Embeddable Period | Embeddable Address |
- 새로 정의한 값 타입에는 @Embeddable
- 사용할 곳에는 @Embedded
- Equals and hashcode 추가해주는게 좋다.
중복된다면?
- Address homeAddress
- Address workAddress 를 같이 사용하고싶다면?
@Embedded
private Address homeAddress;
@Embedded
@AttributeOverrides({
@AttributeOverride(name = "city", column = @Column(name = "WORK_CITY")),
@AttributeOverride(name = "street", column = @Column(name = "WORK_STREET")),
@AttributeOverride(name = "zipcode", column = @Column(name = "WORK_ZIPCODE")),
})
private Address workAddress;
3. 값 타입 컬렉션
- 값 타입을 컬렉션에 담아서 쓰는 것.
- Set 이나 List 형식은 여러개이기 때문에, 따로 테이블이 생성된다. - PK 는 모든 테이블에 있는 값타입들을 다 묶어서 사용하도록 한다. |
@ElementCollection 어노테이션을 이용해서 값 타입 컬렉션임을 선언한다.
@CollectionTable 을 사용하여 생성될 테이블을 정의하고, 어떤 컬럼을 통해 join 할 것인지 설정한다.
값 타입 컬렉션들은
- 라이프사이클이 Member와 함께 가므로 (CascadeType.ALL + orphanremoval = true) 과 같다.
- 기본적으로 Lazy Loading 된다.
값 타입 컬렉션에 대한 변경이 발생하면
- 모든 데이터를 삭제하고, 변경된 이후의 값들을 모두 다시 재저장한다.
실무에서는 정말 간단하지 않은 이상 사용하지 않도록 한다.
- 1대 다 단방향 매핑을 사용한다.
as-is
@ElementCollection
@CollectionTable(name = "ADDRESS",
joinColumns = @JoinColumn(name = "MEMBER_ID")
)
private List<Address> addressHistory = new ArrayList<>();
to-be
@OneToMany(cascade = CascadeType.ALL, orphanRemoval = true)
@JoinColumn("MEMBER_ID")
private List<AddressEntity> addressHistory = new ArrayList<>();
'강의 정리 > 자바 ORM 표준 JPA' 카테고리의 다른 글
10. 중급 문법 (0) | 2021.01.02 |
---|---|
9. 기본 문법 (0) | 2021.01.02 |
7. 프록시와 연관관계 관리 (0) | 2021.01.01 |
6. 고급 매핑 (0) | 2020.12.29 |
5. 다양한 연관관계 매핑 (0) | 2020.12.28 |