Notice
Recent Posts
Recent Comments
Link
«   2024/07   »
1 2 3 4 5 6
7 8 9 10 11 12 13
14 15 16 17 18 19 20
21 22 23 24 25 26 27
28 29 30 31
Tags
more
Archives
Today
Total
관리 메뉴

지우쓰 개발일기

[JPA] 값 타입 본문

Spring Boot/JPA

[JPA] 값 타입

jiwoo-kimm 2020. 9. 13. 17:47

본 포스팅은 자바 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
Comments