Programming/JPA & Spring Data JPA 기초
06. @Embeddable
JKROH
2023. 2. 27. 15:12
반응형
해당 강의는 코드 위주로 진행됩니다. 실질적인 객체 처리를 담당하는 코드는 링크에서 확인하시길 바랍니다.
* 테이블과 매핑 예
- 지금까지는 위의 그림처럼 테이블의 칼럼과 클래스의 속성을 1 vs 1로 매핑했다.
* 실제 모델
- 실제로는 address1, address2, zipcode를 모아 Address로 나눠 표현한다.
- 이러한 방법이 표현력 역시 좋다.
* @Embeddable
- 엔티티가 아닌 타입이 한 개 이상의 필드와 매핑할 때 사용할 수 있는 것이 @Embeddable 애노테이션이다.
- 대표적으로 Address, Money 등이 있다.
- Address와 같은 값 타입 클래스에는 @Embeddable을 붙이고, Hotel과 같이 Embeddable한 타입을 사용할 Entity 클래스에서는 @Embedded를 해당 멤버에 붙여서 사용한다.
* 저장
- Address 객체를 받은 Hotel 객체를 persist를 통해 저장하면, Address 의 각 값들이 저장된다.
* 조회
- 마찬가지로 읽어온 값을 Address값으로 만들어 Hotel 객체에 넣어 알맞게 읽어온다
* null은?
- 저장 될 때는 null 값으로 저장되고 조회할 때도 null로 조회한다.
* 같은 @Embeddable 타입 필드가 두 개면?
- Emplyee 엔티티에 homeAddress 와 workAddress 두 개의 같은 Address 필드를 사용한다.
- 서로 같은 칼럼에 매핑해야하기 때문에 EMF를 초기화 할 때 에러가 난다.
* @AttributeOverride로 설정 재정의
- 새롭게 칼럼을 생성하고 생성한 칼럼에 기존 칼럼값을 매핑해서 저장한다.
- waddress1, waddress2, wzipcode칼럼을 생성하고 해당 칼럼에 workAddress의 기존 값인 address1, address2, zipcode를 매핑해서 사용한다.
* 정리
- @Embeddable을 사용하면 모델을 더 잘 표현할 수 있다.
- 개별 속성을 모아서 이해 < 타입으로 더 쉽게 이해
- (addr1, addr2, zipcode)를 모아서 '이것들이 주소구나' 라고 이해 < 주소네.
- 추상화의 개념과 같다고 생각하면 된다.
반응형