지우쓰 개발일기
[JPA] 값 타입 본문
본 포스팅은 자바 ORM 표준 JPA 프로그래밍 (김영한 저)을 읽고 정리한 내용입니다.
자바 ORM 표준 JPA 프로그래밍
에이콘 오픈 소스 프로그래밍 시리즈. 이 책은 JPA 기초 이론과 핵심 원리, 그리고 실무에 필요한 성능 최적화 방법까지 JPA에 대한 모든 것을 다룬다.
www.aladin.co.kr
Basic Value Type
-
자바 기본 타입
-
래퍼 클래스
-
String
Embedded Type
-
복합 값 타입 (Components)
테이블 Mapping
-
@Embeddable: 값 타입 정의
-
@Embedded: 값 타입 사용
- @AttributeOverrides: 매핑 컬럼명이 중복인 경우
@Embedded Address homeAddress;
@Embedded
@AttributeOverrides({
@AttributeOverride(name="city", column=@Column(name="COMPANY_CITY")),
@AttributeOverride(name="street", column=@Column(name="COMPANY_STREET")),
@AttributeOverride(name="zipcode", column=@Column(name="COMPANY_ZIPCODE"))
})
Address companyAddress;
공유 참조와 불변 객체
공유 참조
-
객체를 대입하면 참조를 공유하기 때문에 부작용이 발생한다.
-
항상 객체.clone()을 통해 값을 복사해야 한다.
불변 객체
-
값 타입을 Immutable Object로 설정하면 부작용을 원천 차단할 수 있다.
-
Integer, String 역시 불변 객체다.
값 타입의 비교
-
동일성(Identity) 비교: 인스턴스의 참조 값 비교 / ==
-
동등성(Equivalence) 비교: 인스턴스의 값 비교 / equals()
값 타입 컬렉션
-
@ElementCollection
-
@CollectionTable(name = "{table_name}", joinColumns = @JoinColumn(name = "{mapping_column_name}"))
-
컬렉션의 변경 사항을 DB에 반영할 때, 연관된 모든 데이터를 삭제하고 컬렉션의 모든 값을 다시 저장한다.
-
매핑 컬럼 수가 많다면 컬렉션 대신 엔티티를 생성해서 일대다 관계로 설정해야 한다.
// Collection 대체 entity
@Entity
public class AddressEntity {
@Id
@GeneratedValue
private Long id;
@Embedded Address address;
}
// Member entity
...
@OneToMany(cascade = CascadeType.ALL, orphanRemoval = true)
@JoinColumn(name = "MEMBER_ID")
private List<AddressEntity> addressHistory = new ArrayList<AddressEntity>();
...
Entity Type & Value Type
Entity Type
-
식별자(@Id)가 있다.
-
생명 주기가 있다.
-
공유 참조가 가능하다.
Value Type
-
식별자가 없다.
-
생명 주기를 엔티티에 의존한다.
-
Immutable Object로 만들고 공유하지 않는 것이 안전하다.
'Spring Boot > JPA' 카테고리의 다른 글
[JPA] JPQL (1) (0) | 2020.09.17 |
---|---|
[JPA] 객체지향 쿼리 개요 (0) | 2020.09.15 |
[JPA] 영속성 전이, 고아 객체 (0) | 2020.09.13 |
[JPA] Proxy, Eager Loading, Lazy Loading (0) | 2020.09.13 |
[JPA] Entity Mapping (0) | 2020.09.13 |