일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
- ROLLBACK
- 영속성전이
- 분할상환분석
- Spring Data JPA
- 정렬
- 플러시
- 페치조인
- JPA
- 즉시로딩
- 관계형 데이터베이스
- Amortized Analysis
- 값타입
- Spring
- Algorithm
- 엔티티 매핑
- DiscriminatorColumn
- Embeddable
- DB
- fetch join
- commit
- 지연로딩
- 순수jpa
- relational database
- MappedSuperclass
- n+1문제
- Flush
- 고아객체
- relational DB
- 영속성 컨텍스트
- DiscriminatorValue
- Today
- Total
Jun's note
[JPA] 값 타입 (기본값 타입, 임베디드 타입, 컬렉션 값 타입) 본문
JPA를 사용할 때 변수값을 3가지 타입으로 정의할 수 있다.
<값타입 분류 3가지>
1. 기본값 타입
2. 임베디드 타입 (복합 값 타입) (예, 좌표 x,y를 하나의 값으로 함께 사용)
3. 컬렉션 값 타입 (기본값 타입과 임베디드 복합해서 사용?)
1. 기본값 타입
<int vs Integer> 기본타입 vs 객체타입
int, double - 변수를 공유하지 않음 (값 변경 x) (메모리에 각각의 주소에 할당됨) (값을 전달,복사하는 것)
Integer, Long(클래스) - 변수를 공유 o (왜? 레퍼런스를 참조하기 때문, 주소를 연결시켜주기 때문에 다른 변수여도 저장소는 같은곳) (참조를 전달)
2. 임베디드 타입
연관되어있는 값끼리 묶어 하나의 클래스로 해결 (엔티티 X)
쉽게 말하면,
1. "회원 엔티티는 이름, 근무 시작일, 근무 종료일, 주소 도시, 주소 번지, 주소 우편 번호를 가진다."
2. "회원 엔티티는 이름, 근무 기간, 집 주소를 가진다."
1번보다 2번 형태로 말하는 것이 간단하고 관리하기 쉽다.
@Entity
public class Member {
@Id @GeneratedValue
private Long id;
private String name;
@Embedded
private Address homeAddress; // 집 주소
@Embedded
private Period workPeriod; // 근무 기간
}
//Address (집주소)
@Embeddable
public class Address {
@Column(name="city")
private String city;
private String street;
private String zipcode;
}
//Peroid (근무기간)
@Embeddable
public class Peroid {
@Temporal(TemporalType.DATE)
Date startDate;
@Temporal(TemporalType.Date)
Date endDate;
}
(임베디드 타입 사용하는 방법)
- @Embeddable: 값 타입을 정의하는 곳에 표시
- @Embedded: 값 타입을 사용하는 곳에 표시
(임베디드 타입 사용시 주의사항)
한 엔티티에서 임베디드 타입은 한 값만 사용해야한다.
예를 들어, address 임베디드타입을 homeAddress, workAddress로 두번 사용 X
왜? 임베디드는 타입은 객체(클래스)로 정의한것으로 참조를 전달함. homeAddress가 값을 변경하면 workAddress도 값이 변경됨 -> 부작용 발생!!!!!!(값은 변경되면 안됨) 내가 변경하지도 않았는데 다른것도 자동으로 변경되는 현상
그래서 값을 변경하고 싶으면 어떻게 해야하나? 객체를 하나 생성해서 사용 (똑같은 값 또 삽입) or 생성자로만 값을 설정하고 수정자(setter) 만들지 않으면 됨
3. <값 타입의 비교> 방법 2가지
1. == 동일성 비교: 인스턴스의 참조 값 비교
2. equals() 동등성비교: 인스턴스의 값 비교
임베디드 객체를 안에 값(필드)을 비교할때는!! 2번으로 해야함 (왜? 객체 2개가 서로 값이 같은지를 비교싶으니깐)
'Programming > JPA' 카테고리의 다른 글
직접 JPQL로 update문을 수행하면 안되는 이유 (0) | 2022.12.13 |
---|---|
[JPA] 페치조인 (fetch join) , n+1문제 (0) | 2022.01.24 |
[JPA] 영속성 전이(CASCADE)와 고아 객체 (0) | 2022.01.23 |
[JPA] 프록시(Proxy), 지연로딩(LAZY)와 즉시로딩(EAGER) (0) | 2022.01.23 |
[JPA] 상속관계매핑, @MappedSuperclass (0) | 2022.01.14 |