지금까지는 엔티티에 연관관계를 제외하고는 모두 자바의 기본타입에 해당하는 값만 매핑하였다.
하지만 예를 들어서 주소라는 값을 하나의 엔티티에 매핑하고 싶은데, 도시명,구,동 이렇게 세가지의 기본타입(String)의 값을 매핑해야한다면 과연 3개를 쭉 나열하는 것이 객체지향적인 것인지 3개를 하나의 객체로 묶어서 하나의 객체로 값을 매핑하는 것이 객체지향적인 것인지 고민을 하자만 바로 후자일 것이다.
1. 기존의 엔티티
@Entity
@Table(name = "user)
public class User {
@Id
@GeneratedValue(strategy = GenerationType.AUTO)
private Long uid;
private String name;
private String phoneNum;
private String zipCode;
private String address1;
private String address2;
}
주소라는 하나의 객체를 만들고 그 안에 도시명,구,동 필드를 넣고 회원이라는 엔티티에는 주소라는 하나의 객체를 레퍼런스함으로써 조금더 객체지향적으로 엔티티를 매핑하는 방법인 것이다.
2. Address라는 하나의 객체로 묶어 사용하기
@Entity
@Table(name = "user)
public class User {
@Id
@GeneratedValue(strategy = GenerationType.AUTO)
private Long uid;
private String name;
private String phoneNum;
private Address address;
}
앞서 주소를 표현하는 3개의 데이터를 1개의 주소라는 의미의 객체로 표현한다면 훨씬더 가독성이 좋은 코드로 만들 수 있다고 말씀드렸습니다. 위의 코드를 보면 가독성이 훨씬 좋아졌습니다.
위 처럼 JPA Entity안의 Column을 하나의 객체로써 사용을 하고 싶다면 @Embedded, @Embeddable 어노테이션을 사용해야 합니다.
@Embeddable
public class User {
private String zipCode;
private String address1;
private String address2;
}
우선 하나로 표현하고자 하는 개념에 해당 클래스를 생성한 뒤 필드를 생성합니다. 그 후, 클래스 상단에
@Embeddable을 입력합니다.(@Embeddabledms 생략이 가능하다.)
@Entity
@Table(name = "user)
public class User {
@Id
@GeneratedValue(strategy = GenerationType.AUTO)
private Long uid;
private String name;
private String phoneNum;
@Embedded
private Address address;
}
마지막으로 Entity클래스에서 앞서 생성한 객체 필드를 생성하고, 필드바로위에 @Embedded어노테이션을 부여하면 끝.
참조 사이트 : https://galid1.tistory.com/592
출처: https://coding-start.tistory.com/84 [코딩스타트]
'SPRING > 기본 문법' 카테고리의 다른 글
[SPRING] Tasklet 방식과 Chunk 방식 구현 (0) | 2021.07.21 |
---|---|
[SPRING] Spring Batch 환경 설정 (0) | 2021.07.20 |
[SPRING] 빈 생명주기 콜백 (0) | 2021.04.27 |
[SPRING] 다양한 의존관계 주입 방법 (0) | 2021.04.27 |
[SPRING] Spring에서 전역 예외 처리하기 (0) | 2021.04.19 |