728x90
반응형
안녕하세요 이번 글에서는 JPA에서 Embedded 타입을 사용하여 보겠습니다.
먼저 임베디드 타입이 어떤 것 인지 간략하게 알아보겠습니다.
- Entity 타입 : @Entity가 선언되어 있는 객체를 뜻한다.
- 값 타입 : int, Integer, String처럼 단순히 값으로 사용하는 자바 기본 타입이나 객체
- 임베디드 타입 : 주로 기본 값 타입을 모아서 만들어서 복합 값 타입이라고도 말한다.
이제 코드로 알아보겠습니다.
@Entity
@Getter @Setter
public class Member {
@Id @GeneratedValue
@Column(name="member_id")
private Long id;
@NotEmpty
private String name;
@Column(name = "city")
private String city;
@Column(name = "street")
private String street;
@Column(name = "zipcode")
private String zipcode;
@JsonIgnore
@OneToMany(mappedBy = "member")
private List<Order> orders = new ArrayList<>();
}
위처럼 Entitry의 필드의 구성중 주소와 관련된 부분을 좀 더 편리하게 관리하기 위하여 임베디드 타입으로 만들어
보겠습니다.
@Embeddable //임베디드 타입을 사용할 경우 선언하여 준다
@Getter
public class Address {
private String city;
private String street;
private String zipcode;
protected Address() {
}
public Address(String city, String street, String zipcode) {
this.city = city;
this.street = street;
this.zipcode = zipcode;
}
}
Address 클래스를 생성하여 준다음 @Embeddable 선언하여 줍니다. 그다음 Memeber 클래스의 필드에 주소와 관련된 필드들을 생성하여 줍시다.
@Entity
@Getter @Setter
public class Member {
@Id @GeneratedValue
@Column(name="member_id")
private Long id;
@NotEmpty
private String name;
@Embedded //임베디드 타입 사용시 선언
private Address address;
@JsonIgnore
@OneToMany(mappedBy = "member")
private List<Order> orders = new ArrayList<>();
}
기존에 있던 주소 필드 값들을 지워준 다음 생성한 Address 클래스를 필드에 넣어준 다음 @Embedded를 선언하여 사용하여 줍니다.
위처럼 임베디드 타입은 엔티티의 값일 뿐이며, 임베디드 타입을 사용하기 전과 후에 매핑하는 테이블은 같습니다.
[ 임베디드 타입 사용 시 장점 ]
- 재사용
- 높은 응집도
- 임베디드 타입을 포함한 모든 값 타입은, 값 타입을 소유한 엔티 티에 생명주기를 의존함
감사합니다 ^^
728x90
반응형
'Spring & Spring Boot' 카테고리의 다른 글
Spring Cloud Netflix - Eureka (0) | 2021.06.11 |
---|---|
[ Spring-Boot ] JPA QueryDsl 정렬 사용하기 (1) | 2021.05.23 |
[ Spring-Boot ] JPA Entity 사용하기 (0) | 2021.05.23 |
[ Spring-Boot ] JPA @GeneratedValue 사용하기 (0) | 2021.05.22 |
[ Spring-Boot ] JPA 공통 Entity 만들기 (0) | 2021.05.22 |