본문 바로가기
JAVA/SpringBoot

[김영한] 자바 ORM 표준 JPA 프로그래밍 - 섹션 9. @Embedable, @Embedded, @AttributeOverrides

by 설총이 2023. 11. 5.

 

값 타입과 임베디드 타입, 불변객체에 대해 설명
@Embedable, @Embedded, @AttributeOverrides

 

(요약)

테이블의 구조는 변경점이 없다. 객체 모델링을 다양하게 사용할 수 있다.
1) 객체지향적인 프로그래밍을 할 수 있도록 별도의 클래스로 추상화할 수 있다.
2) 반복되는 필드의 경우 객체로 선언함으로서 반복되는 코드를 줄일 수 있다.
3) 공통된 유효한 메소드를 사용할 수 있다.

 

 

1. 기본값 타입

• 새로운 값 타입을 직접 정의할 수 있음
• JPA는 임베디드 타입(embedded type)이라 함
• 주로 기본 값 타입을 모아서 만들어서 복합 값 타입이라고도 함
• int, String과 같은 값 타입

 

 

2. 임베디드 타입 ( 중요 )

• 새로운 값 타입을 직접 정의할 수 있음
• JPA는 임베디드 타입(embedded type)이라 함
• 주로 기본 값 타입을 모아서 만들어서 복합 값 타입이라고도 함
• int, String과 같은 값 타입

 

소스코드 예제

 

==> 테이블의 구조는 변경점이 없다. 객체 모델링을 다양하게 사용할 수 있다.
1) 객체지향적인 프로그래밍을 할 수 있도록 별도의 클래스로 추상화할 수 있다.
2) 반복되는 필드의 경우 객체로 선언함으로서 반복되는 코드를 줄일 수 있다.
3) 공통된 유효한 메소드를 사용할 수 있다.

 

 

값 타입의 객체를 두개 이상 사용하고 싶을 때

소스코드 예제

==> 그냥 선언하면 "Repeated column in mapping" 에러가 발생한다.
아래와 같이 중복된 값 타입을 사용하고자 할 때 AttributeOverrides를 사용해야한다.

 

3. 값 타입과 불변 객체

 

 

소스코드 예제

( 잘못된 케이스 )

==> member의 주소만 변경되는것이 아닌 참조하고있는 member2도 수정되게된다.

 

( 정상 ) 참조하는 객체는 copy를 사용