- Embeddable 객체 안에서도 @Column 같은 annotation 사용 가능
- @Embeddable의 진짜 큰 장점은 집 주소와 회사 주소 이런 식의 정보를 모두 entity에 담아야 할 때, Embed를 쓰지 않으면 모든 필드를 각각 다 만들어주어야 함 → DRY(Do not Repeat Yourself) 위반.
@Embeddable // Embed를 할 수 있는 클래스. Entity 내부에 embed 할 수 있음
@Data
@NoArgsConstructor
@AllArgsConstructor
public class Address {
private String city;
private String district;
@Column(name="address_detail")
private String detail;
private String zipCode;
}
private String homeCity;
private String homeDistrict;
private String homeDetail;
private String homeZipCode;
private String companyCity;
private String companyDistrict;
private String companyDetail;
private String companyZipCode;
// >>>>>>>>>>
@Embedded
@AttributeOverrides(value={
@AttributeOverride(name="city", column=@Column(name="home_city")),
@AttributeOverride(name="district", column=@Column(name="home_district")),
@AttributeOverride(name="detail", column=@Column(name="home_address_detail")),
@AttributeOverride(name="zipCode", column=@Column(name="home_zip_code")),
})
private Address homeAddress;
@Embedded
private Address companyAddress;
- 그냥 Address로 두 개 만들면 field이름 중복되기 때문에 @AttributeOverrides를 이용하여 column이름을 지정해 줄 수 있음
- new Address() 나 null이나 어차피 각각의 필드에 다 null을 넣게 됨으로 결과는 같게 됨