본문 바로가기
[Spring Boot]/[JPA]

[JPA] 임베디드 타입 (@Embeddable)

by 북방바다코끼리표범 2023. 10. 28.

복습

https://shins99.tistory.com/116

 

[JPA] 영속성 전이

복습 https://shins99.tistory.com/115 [JPA] 상속관계 매핑 복습 https://shins99.tistory.com/114 [JPA] 연관관계 매핑 정리 복습 https://shins99.tistory.com/113 [JPA] 양방향과 단방향 매핑, 연관관계의 주인(mappedBy) 복습 htt

shins99.tistory.com


임베디드 타입 (@Embeddable)

- 엔티티의 일부에 별도의 클래스를 사용하여 구현함으로써, 코드를 더 모듈화하고 재사용성을 높이는 방식

- 임베디드 타입을 사용함으로써 복잡한 속성 그룹을 분리하고 공통 타입을 다양한 엔티티에서 재사용가능

 

 

임베디드 타입을 사용하는 예시
 
@Entity
 
public class User {
 
 
 
@Id
 
@GeneratedValue
 
private Long id;
 
 
 
private String username;
 
private String city;
 
private String street;
 
private String zipcode;
 
...
 
}

- city, street, zipcode는 주소에 해당

- 이 필드를 Address라는 클래스로 만들어 임베디드 타입으로 선언하여 사용가능

 

임베디드 타입으로 변경
 
@Embeddable
 
public class Address {
 
 
 
private String city;
 
private String street;
 
private String zipcode;
 
 
 
public Address() {}
 
...
 
}

 
@Entity
 
public class User {
 
 
 
@Id
 
@GeneratedValue
 
private Long id;
 
 
 
private String username;
 
 
 
@Embedded
 
private Address address;
 
...
 
}

- 임베디드 타입인 클래스에 @Embeddable을 붙여주고 사용하는 엔티티에 @Embedded를 붙여주면 됨

 

User 테이블

Address에 있는 필드 값이 User에 모두 들어가 있음

 

- 사용자 정보를 입력할 때는 주소, 연락처 등 여러 가지 정보를 입력해야 함

(이 중에서 주소는 도시, 도로명주소, 우편번호 등으로 구성)

- Embeddable타입으로 Address 클래스를 선언해서 중복 코드를 줄일 수 있음

 

임베디드 타입 주의사항
  • 기본 생성자가 필수이다.
  • 엔티티에서 공유하여 사용하면 부작용이 발생한다.
  • 불변적이어야 한다.  ( 생성자로만 값을 설정하고 Setter 사용 X )
  • 생명주기가 사용된 엔티티에 의존한다.