복습
https://shins99.tistory.com/116
임베디드 타입 (@Embeddable)
- 엔티티의 일부에 별도의 클래스를 사용하여 구현함으로써, 코드를 더 모듈화하고 재사용성을 높이는 방식
- 임베디드 타입을 사용함으로써 복잡한 속성 그룹을 분리하고 공통 타입을 다양한 엔티티에서 재사용가능
임베디드 타입을 사용하는 예시
|
|
|
public class User { |
|
|
|
|
|
|
|
private Long id; |
|
|
|
private String username; |
|
private String city; |
|
private String street; |
|
private String zipcode; |
|
... |
|
} |
- city, street, zipcode는 주소에 해당
- 이 필드를 Address라는 클래스로 만들어 임베디드 타입으로 선언하여 사용가능
임베디드 타입으로 변경
|
|
|
public class Address { |
|
|
|
private String city; |
|
private String street; |
|
private String zipcode; |
|
|
|
public Address() {} |
|
... |
|
} |
|
|
|
public class User { |
|
|
|
|
|
|
|
private Long id; |
|
|
|
private String username; |
|
|
|
|
|
private Address address; |
|
... |
|
} |
- 임베디드 타입인 클래스에 @Embeddable을 붙여주고 사용하는 엔티티에 @Embedded를 붙여주면 됨
User 테이블
Address에 있는 필드 값이 User에 모두 들어가 있음
- 사용자 정보를 입력할 때는 주소, 연락처 등 여러 가지 정보를 입력해야 함
(이 중에서 주소는 도시, 도로명주소, 우편번호 등으로 구성)
- Embeddable타입으로 Address 클래스를 선언해서 중복 코드를 줄일 수 있음
임베디드 타입 주의사항
- 기본 생성자가 필수이다.
- 엔티티에서 공유하여 사용하면 부작용이 발생한다.
- 불변적이어야 한다. ( 생성자로만 값을 설정하고 Setter 사용 X )
- 생명주기가 사용된 엔티티에 의존한다.
'[Spring Boot] > [JPA]' 카테고리의 다른 글
[JPA] Pilot_Project 블로그 테마별 알아보기 (1) | 2023.10.30 |
---|---|
[JPA] JPQL (Java Persistence Query Language)이란 ? (2) | 2023.10.29 |
[JPA] 영속성 전이 (0) | 2023.10.27 |
[JPA] 상속관계 매핑 (1) | 2023.10.26 |
[JPA] 연관관계 매핑 정리 (1) | 2023.10.25 |