값 타입과 임베디드 타입, 불변객체에 대해 설명
@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를 사용
'JAVA > SpringBoot' 카테고리의 다른 글
[Querydsl] QueryDsl SpringBoot 버전 별 gradle 설정 (1) | 2023.11.24 |
---|---|
[김영한] 자바 ORM 표준 JPA 프로그래밍 - 섹션 9. @ElementCollection, @CollectionTable (0) | 2023.11.06 |
[김영한] 자바 ORM 표준 JPA 프로그래밍 - 섹션 8. cascade, orphanRemoval (0) | 2023.11.01 |
[김영한] 자바 ORM 표준 JPA 프로그래밍 - 섹션 8. 즉시로딩과 지연로딩 (0) | 2023.10.31 |
[김영한] 자바 ORM 표준 JPA 프로그래밍 - 섹션 8. 프록시 (0) | 2023.10.31 |