JPA 데이터 타입
JPA에서 데이터 타입으로 2가지로 나눠보면
- 엔티티 타입
- @Entity 어노테이션을 이용해서 정의된 객체
- Entity 타입은 데이터가 변경되어도 식별자로 추적이 가능
- 값 타입
- 식별자가 없고 값만 존재하므로 변경되면 추적이 불가능
- 단순히 값으로 사용하는 자바 기본 타입이나 객체
- 기본값 타입
- 자바 기본 타입(int, double)
- wrapper 클래스(Integer, Long)
- String
- 임베디드 타입
- JPA에서 정의해서 사용
- 컬렉션 값 타입
- JPA에서 정의해서 사용
- 컬렉션에 기본값 또는 임베디드 타입을 넣은 형태
- 기본값 타입
값 타입 컬렉션(collection value type)이란?
값 타입을 컬렉션에 담아서 쓰는 것을 말하며 값 타입을 하나 이상 저장할 때 사용한다
연관관계 매핑에서 엔티티를 컬렉션으로 사용하는 것이 아니라 값 타입을 컬렉션에 쓰는 것이다
@ElementCollection
@CollectionTable(name = "oldPasswords", joinColumns = @JoinColumn(name = "user_id"))
private List<String> oldPasswords = new ArrayList<>();
@ElementCollection
- 엔티티 클래스에 컬렉션(이 코드에서는 List)을 포함시키기 위해 사용하며 엔티티가 아니라 별도의 테이블에 저장
- 컬렉션 값 타입은 @ElementCollection(fetch = LAZY)를 default값으로 한다
fetch = LAZY?
더보기
JPA의 Fetch
- Entity를 조회할때, Entity와 연관관계가 있는 다른 Entity의 정보를 가져오는 시점을 결정해줌
Fetch의 타입은 2가지가 있는데
- LAZY Fetch Type(지연 로딩)
- entity 조회할 때는 가져오지 않고 연관관계에 있는 entity를 참조할 때 가져옴
- EAGER Fetch Type(즉시 로딩)
- entity를 조회할때 연관관계에 있는 entity를 가져옴
어노테이션 이름에서 뒤쪽에 Many가 붙어있으면 지연로딩(해당 Entity 정보가 여러개 들어 있을 수도 있기때문에)
어노테이션 이름에서 뒤쪽에 One이 붙어있으면 즉시로딩(해당 Entity 정보가 한개만 들어오기때문에)
@CollectionTable(name = "oldPasswords", joinColumns = @JoinColumn(name = "user_id"))
- oldPasswords라는 이름의 테이블을 생성하고, 이 테이블이 외부 테이블(이 코드에서는 user_id 컬럼을 가진 테이블)과 조인되도록 설정합니다
'TIL' 카테고리의 다른 글
Could not autowire. No beans of 오류 / 프로그래머스<기사단원의 무기> (0) | 2023.12.13 |
---|---|
프로그래머스 덧칠하기, 소수만들기 (0) | 2023.12.12 |
JUnit Assert(단정) 메서드 (2) | 2023.12.04 |
테스트 관련 어노테이션, Given - When - Then 패턴 (0) | 2023.11.30 |
2023-11-23 TIL (0) | 2023.11.23 |
댓글