본문 바로가기
강의 정리/자바 ORM 표준 JPA

8. 값 타입

by 이석준석이 2021. 1. 1.

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