본문 바로가기
공부/Spring

[JPA] 값 타입

by JERO__ 2022. 7. 2.
@Embeddable
public class Period {

	private LocalDateTime startDate;
	private LocalDateTime endDate;
}

JPA의 타입 분류

  • 엔티티 타입 : @Entity
  • 값 타입 : int, Integer, String 처럼 자바 타입 객체

값타입

  1. 기본 값타입
    • 기본타입 : int, double
    • 래퍼 클래스 : Integer, Long
    • String
    • 기본 생성자 필수임베디드 타입 : JPA는 임베디드 타입 

 

  1. 컬렉션 값 타입 : 컬렉션을 새로운 테이블로 만듦
    • 기본키를 사용할 수 없어서, 이 대신 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를 만들지 않는다.
  • 생성자로만 값을 설정한다.

 

'공부 > Spring' 카테고리의 다른 글

[JPA] 페치 조인  (0) 2022.07.18
[JPA] 쿼리 문법  (0) 2022.07.18
[JPA] 프록시와 연관관계 관리(지연로딩)  (0) 2022.07.02
[JPA] 다양한 연관관계 매핑  (0) 2022.07.02
[JPA] 연관관계 매핑 기초  (0) 2022.07.02

댓글