[이전글]
[JPA] Jakarta Spec(JSR 338) - (1)Entity, Field, Access Type
[JPA] Jakarta Spec(JSR 338) - (2)기본 키(PK) 및 Entity ID
Embeddable Classes (`@Embeddable` annotated classes)
- Embeddable 클래스는 @Embeddable 어노테이션을 명시해야 한다
- @Embeddable 어노테이션을 명시한 클래스는 @Entity 어노테이션을 명시할 수 없다
- Embeddable 클래스는 자체 식별성을 가지지 않는다
- Embeddable 클래스는 보통 소속된 Entity의 property 중 일부로 존재한다
- Embeddable 클래스는 Map의 Key와 Value로 사용될 수 있다
- Embeddable 클래스는 내부에 Java 기본 타입을 포함한 다른 타입의 컬렉션을 속성으로 가질 수 있다
- Embeddable 클래스 내부에서 특정 Entity나 Entity의 컬렉션에 대한 관계(Relation)를 포함할 수 있다
- Embbedable 클래스가 EmbedfdedId 혹은 Map의 Key로 사용 되는 경우, 그러한 관계를 포함해서는 안 된다
Embbeddale 클래스 및 기본 타입에 대한 컬랙션
- Entity 클래스는 Embeddable 클래스의 컬렉션 타입을 포함할 수 있다
- 이는 @ElementCollection 어노테이션의 명시로 적용할 수 있다
- @ElementCollection 어노테이션을 명시한 Embeddable 클래스(Collection) 는 내부에 또 다른 @ElementCollection 필드를 가져서는 안 된다
- @ElementCollection 어노테이션을 명시한 Embeddable 클래스 내부에선 many-to-one , one-to-one 관계만 포함 가능하다
- Embeddable Class는 이러한 Relation의 주인(Owner) 측에 있어야 하며, 관계는 외래 키(FK) 매핑에 의해 매핑되어야 한다
Embeddable 클래스 사용 예시
@Embeddable
public class ShippingInfo {
private String address;
private String zipCode;
}
@Entity
@Table(name = "D_ORDER")
public class Order {
@EmbeddedId
private OrderId orderId;
@Embedded
@AttributeOverrides({
@AttributeOverride(name = "address", column = @Column(name = "address")),
@AttributeOverride(name = "zipCode", column = @Column(name = "zipcode"))
})
private ShippingInfo shippingInfo;
}
Embeddable 클래스의 컬렉션 타입 사용 예시
@Embeddable
public class OrderLine {
@Embedded
@AttributeOverride(name = "productId", column = @Column(name = "product_id"))
private ProductId productId;
@Convert(converter = MoneyConverter.class)
@Column(name = "price")
private Money price;
@Column(name = "amount")
private int amount;
}
@Entity
@Table(name = "D_ORDER")
public class Order {
@EmbeddedId
private OrderId orderId;
@ElementCollection(fetch = FetchType.EAGER)
@CollectionTable(name = "D_ORDER_LINE", joinColumns = @JoinColumn(name = "order_id"))
@OrderColumn(name = "order_line_idx")
private List<OrderLine> orderLines;
}
반응형
'개발 > Java' 카테고리의 다른 글
[JPA] Jakarta Spec(JSR 338) - (4)Map Collections (0) | 2023.09.03 |
---|---|
[JPA] Jakarta Spec(JSR 338) - (2)기본 키(PK) 및 Entity ID (0) | 2023.08.23 |
[JPA] Jakarta Spec(JSR 338) - (1)Entity, Field, Access Type (0) | 2023.08.17 |
[Java] 상수 값에 행위를 정의하고 싶다면 - Constant Specific Method Implementation (0) | 2023.07.22 |
[Java] 인수값 유효성 검증 - 표현 계층 vs 응용 계층 (0) | 2022.10.23 |
댓글