프로그래밍/Spring
[ JPA ] 임베디드 타입
Yanoo
2022. 1. 26. 22:52
728x90
반응형
@Entity
public class Member {
@Id @GeneratedValue
@Column(name = "MEMBER_ID")
private Long id;
@Column(name = "USERNAME")
private String username;
private LocalDateTime startDate;
private LocalDateTime endDate;
private String city;
private String street;
private String zipcode;
}
보면
startDate와 endDate
city와 street와 zipcode
이 두 그룹은 연관이 있어 묶어서 관리하면 관리도 쉽고 변경할 일이 있을 때 쉽게 바꿀 수 있을 것이다.
이 때 사용하는 것이 임베디드 타입이다.
바꾼 모습을 보면
- Member
@Entity public class Member { @Id @GeneratedValue @Column(name = "MEMBER_ID") private Long id; @Column(name = "USERNAME") private String username; //기간 Period @Embedded private Period workPeriod; //주소 @Embedded private Address homeAddress; }
- Period
@Embeddable public class Period { private LocalDateTime startDate; private LocalDateTime endDate; public Period() { } public Period(LocalDateTime startDate, LocalDateTime endDate) { this.startDate = startDate; this.endDate = endDate; } }
- Address
@Embeddable public class Address { private String city; private String street; private String zipcode; public Address() { } public Address(String city, String street, String zipcode) { this.city = city; this.street = street; this.zipcode = zipcode; } }
이렇게 바꾸면 된다.
여기서 @Embeddable과 @Embedded는 둘 중에서 하나만 사용하면 되지만 둘다 사용하는 것을 권장한다고 한다.
그리고 기본 생성자는 필수라고 한다.
🎈 임베디드 타입과 테이블 매핑
- 임베디드 타입은 엔티티의 값일 뿐이다.
- 임베디드 타입을 사용하기 전과 후에 매핑하는 테이블은 같다.
- 객체와 테이블을 아주 세밀하게 매핑하는 것이 가능하다.
- 잘 설계한 ORM 애플리케이션은 매핑한 테이블의 수보다 클래스의 수가 더 많다.
728x90
반응형