"인프런 - 자바 ORM 표준 JPA 프로그래밍 강의를 듣고 작성한 글 입니다."
www.inflearn.com/course/ORM-JPA-Basic#
자바 ORM 표준 JPA 프로그래밍 - 기본편 - 인프런
JPA를 처음 접하거나, 실무에서 JPA를 사용하지만 기본 이론이 부족하신 분들이 JPA의 기본 이론을 탄탄하게 학습해서 초보자도 실무에서 자신있게 JPA를 사용할 수 있습니다. 초급 웹 개발 프로그
www.inflearn.com
임베디드 타입과 연관관계?
JPA 표준 스펙에 나와있는 내용으로, PhoneNumber 와 같은 임베디드 타입이 PhoneEntity 와 같은 Entity 를 가질 수 있다.
즉, 임베디드 타입이 Entity 값을 가질 수 있다는 것이다.(Entity 자체의 외래 키 값만 가지고 있으면 되기 때문)
* 그런데 만약 한 Entity 안에서 같은 값 타입을 사용하면 어떻게 될까?
Member.java 안에 Address 타입의 객체를 2개 이상 선언하면?
-> 에러가 발생한다.(컬럼 명이 중복되기 때문이다. - Repeated column in mapping for entity)
이럴때 사용하는 것이 바로 @AttributeOverride 어노테이션 이다.
위의 어노테이션은 컬럼 명 속성을 재정의 한다.
- Member.java
@Embedded
private Address homeAddress;
@Embedded
@AttributeOverrides({@AttributeOverride(name = "city", column = @Column(name = "WORK_CITY")),
@AttributeOverride(name = "street", column = @Column(name = "WORK_STREET")),
@AttributeOverride(name = "zipcode", column = @Column(name = "WORK_ZIPCODE"))}) // DB 컬럼 명을 재정의 해준다.
private Address workAddress;
아래의 hibernate SQL 을 보면 정의한 컬럼 명 대로 테이블의 컬럼이 생성되었음을 알 수 있다.
- hibernate SQL
Hibernate:
create table Member (
MEMBER_ID bigint not null,
city varchar(255),
street varchar(255),
ZIPCODE varchar(255),
USERNAME varchar(255),
WORK_CITY varchar(255),
WORK_STREET varchar(255),
WORK_ZIPCODE varchar(255),
endDate timestamp,
startDate timestamp,
TEAM_ID bigint,
primary key (MEMBER_ID)
)
* 참고 : 임베디드 타입 값이 null 이면 매핑한 컬럼 값은 모두 null 이 된다.
다음 글 에선 값 타입의 불변 객체에 대하여 알아보자.
'JPA' 카테고리의 다른 글
값 타입 - 불변 객체와 값 타입 비교(2) (0) | 2020.10.22 |
---|---|
값 타입 - 불변 객체와 값 타입 비교(1) (0) | 2020.10.21 |
값 타입 - 기본 값 타입, 임베디드 타입(2) (0) | 2020.10.21 |
값 타입 - 기본 값 타입, 임베디드 타입(1) (0) | 2020.10.21 |
실전예제 5 - 프록시 및 연관관계 (0) | 2020.10.17 |