본문으로 바로가기

지금까지는 엔티티에 연관관계를 제외하고는 모두 자바의 기본타입에 해당하는 값만 매핑하였다.

하지만 예를 들어서 주소라는 값을 하나의 엔티티에 매핑하고 싶은데, 도시명,구,동 이렇게 세가지의 기본타입(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 [코딩스타트]