[JPA] @Embedded 와 @Embeddable
2021. 10. 8. 21:12ㆍ개발공부/Java
728x90
@Embedded 와 @Embeddable
엔티티 여러 필드가 한 객체로 묶여서 관리할 경우 @Embeddable
클래스를 사용하고 엔티티에 @Embedded
을 걸어줍니다.
@Entity
@Table(name = "PRODUCT")
public class Product {
@Embedded
private Address address;
private int price;
}
@NoArgsConstructor(access = AccessLevel.PROTECTED)
@Embeddable
@ToString
public class Address {
@Builder
public Address(String city, String street, String zipcode) {
this.city = city;
this.street = street;
this.zipcode = zipcode;
}
private String city;
private String street;
private String zipcode;
}
Product
의 주소필드가 city, street, zipcode로 구성될 때 Address
클래스를 Embeddable
로 걸어 테이블을 생성하지 않고 객체로 다중필드를 엔티티에서 관리할 수 있습니다.
@Embeddable
어노테이션은 이 클래스가 엔티티들에 의해 embedded (포함된다)라고 선언해줍니다. 엔티티에선 @Embedded
를 붙여준 필드는 다른 클래스에서 @Embaddable
로 선언된 타입이 엔티티로 내장됩니다.
혹시나 엔티티와 엠베디드 클래스 내 필드명이 같은 변수가 있을 경우 엔티티의 엠베디드 필드에 @AttributeOverride
를 사용해 name, column을 정해주면 됩니다.
@Embedded
@AttributeOverrides({
@AttributeOverride( name = "firstName", column = @Column(name = "contact_first_name")),
@AttributeOverride( name = "lastName", column = @Column(name = "contact_last_name")),
@AttributeOverride( name = "phone", column = @Column(name = "contact_phone"))
})
private ContactPerson contactPerson;
참고자료
'개발공부 > Java' 카테고리의 다른 글
[Java] main 메서드 (0) | 2022.01.15 |
---|---|
[Java] Mac class (0) | 2022.01.13 |
[Supplier] What is Java 8 Supplier interface? (0) | 2021.09.11 |
[Builder] 생성자 어노테이션 (0) | 2021.09.05 |
[Java] Java Stream(스트림) (0) | 2021.09.03 |