JPA @Embeddable, @Embedded 사용법

devdo·2023년 2월 21일
0

JPA

목록 보기
4/13
post-thumbnail

JPA Entity 내 값 객체 타입 중
임베디드 타입을 정리해보자.

주로 배송지, 주소 등같이 필수적으로 묶어야 하는 것들은 아예 객체로 묶어서 관리한다.

ex. 이름, 도시, 주소 번지, 주소 우편번호

@Embeddable 를 붙여주면
주소 임베디드 타입을 생성하기 위해 주소 클래스가 생성되고

@Embedded 의 최대 장점은 @Embedded를 붙여 많은 필드를 회원에 이식(임베디드)시킬 수 있다.


Address

@Embeddable
@Getter
public class Address {
    private String city;
    private String street;
    private String zipcode;
}

Member

@Entity
@Getter @Setter
public class Member {
    @Id
    @GeneratedValue
    @Column(name = "member_id")
    private Long id;

    private String name;

    @Embedded
    private Address address;

}

💥헷갈리지 말아야할 것은!

DB상에는 Address도 Member 테이블의 필드로 들어가는 거다.

실제로 다음과 같이 추가가 됨! (city, street, zipcode)


💥주의점!

1) 값 객체는 불변 객체여야 한다는 점! 그래서 @Setter 는 두지 않아야 한다!

2) 값 객체 비교할 때도 객체를 비교하기 때문에 equals()를 사용해야 되고 인스턴스가 달라도 값이 같으면 true가 되기 위해 equals() hashCode()를 재정의를 해줘야 한다.

재정의하는 내용은 다음 블로그를 참고하기 바란다.
https://velog.io/@mooh2jj/equals와-hashCode는-언제-사용하는가

profile
배운 것을 기록합니다.

0개의 댓글