임베디드 타입(Embedded type)
JPA에서 새로운 값 타입을 직접 정의해서 사용하는 것을 임베디드 타입이라고 한다.
임베디드 타입도 int, String 처럼 값 타입이다.
임베디드를 사용하지 않았을 때
@Entity
public class User {
@Id
@GeneratedValue
private Integer id;
private String name;
private String phone;
// address
private String city;
private String country;
private String zipcode;
// standard getters, setters
}
User가 상세한 데이터(주소)를 그대로 가지고 있는 것은 객체지향적이지 않으면 응집력만 떨어진다.
임베디드 사용하기
- @Embeddable : 클래스가 다른 엔티티에 의해 포함됨
- @Embedded : 다른 엔티티에 포함하는데 사용
- 임베디드 타입은 기본 생성자 필수
@Entity
public class User {
@Id
@GeneratedValue
private Integer id;
private String name;
private String phone;
@Embedded
private Address address;
// standard getters, setters
}
@Embeddable
public class Address {
private String city;
private String country;
private String zipcode;
// standard getters, setters
}
임베디드의 장점
- 재사용 가능
- 높은 응집도
정리
임베디드 타입 덕분에 객체와 테이블을 세밀하게 매핑하는 것이 가능하다.
잘 설계한 ORM 애플리케이션은 매핑한 테이블의 수보다 클래스의 수가 더 많다.
참고
[Book] 자바 ORM 표준 JPA 프로그래밍
반응형
'공부 > Spring' 카테고리의 다른 글
[JPA] Collection 컬렉션 (Collection, List, Set, List+@OrderColumn) (0) | 2022.09.15 |
---|---|
[JPA] Optional (0) | 2022.09.14 |
[JPA] 최범균님 <JPA 기초> 내용 정리하기 (0) | 2022.09.07 |
[java] BigDecimal 사칙연산(더하기, 빼기, 나누기, 곱하기), 비교(compareTo) (0) | 2022.05.16 |
[java] BigDecimal error : Non-terminating decimal expansion; no exact representable decimal result. (0) | 2022.05.15 |