Open BananMoon opened 1 month ago
하나의 Entity 안에 필드를 하나의 다른 클래스로 관리하고자 할 수 있다. 이때 엔티티가 여러 테이블이 아닌 하나의 테이블에 매핑될 수 있게 해주는게 @Embeddable이다.
@Embeddable
하나의 클래스가 다른 엔티티들에 임베디드(embedded)될 수 있도록 선언하는 애노테이션. Enum 클래스에 붙여준다.
@Embeddable public class ContactPerson { private String firstName; private String lastName; private String phone; }
그리고 이렇게 embedded 가능한 클래스를 하나의 타입으로서 다른 엔티티에 임베드(embed)시키기 위해 사용하는 애노테이션이 @Embedded이다.
@Embedded
@Entity public class Company { @Id @GeneratedValue private Integer id; private String name; private String address; private String phone; @Embedded private ContactPerson contactPerson; }
그럼 이 클래스의 필드들을 DB의 칼럼들 어떻게 매핑시킬까?
@AttributeOverrides
@AttributeOverride
이때 사용할 수 있는 애노테이션이 @AttributeOverrides, @AttributeOverride인데, 임베디드 타입의 칼럼 속성을 오버라이드(override)할 수 있다. 속성으로 name, column 옵션을 지정할 수 있다.
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;
예시를 보면, ContactPerson 클래스에 있는 firstName 필드를 contact_first_name 칼럼으로 매핑하고, lastName 필드를 contact_last_name 칼럼으로 매핑하고, phone 필드를 contact_phone 칼럼으로 매핑한다
firstName
contact_first_name
lastName
contact_last_name
phone
contact_phone
Entity 내 필드를 Enum 클래스로 사용할 때도 있다.
@Enumerated(EnumType.STRING)
EnumType이라는 Enum을 확인해보면 2가지를 지원한다.
ORDINAL
STRING
Entity 필드에 클래스 타입 필드 사용.
하나의 Entity 안에 필드를 하나의 다른 클래스로 관리하고자 할 수 있다. 이때 엔티티가 여러 테이블이 아닌 하나의 테이블에 매핑될 수 있게 해주는게
@Embeddable
이다.1️⃣
@Embeddable
하나의 클래스가 다른 엔티티들에 임베디드(embedded)될 수 있도록 선언하는 애노테이션. Enum 클래스에 붙여준다.
그리고 이렇게 embedded 가능한 클래스를 하나의 타입으로서 다른 엔티티에 임베드(embed)시키기 위해 사용하는 애노테이션이
@Embedded
이다.2️⃣
@Embedded
그럼 이 클래스의 필드들을 DB의 칼럼들 어떻게 매핑시킬까?
3️⃣
@AttributeOverrides
,@AttributeOverride
이때 사용할 수 있는 애노테이션이
@AttributeOverrides
,@AttributeOverride
인데, 임베디드 타입의 칼럼 속성을 오버라이드(override)할 수 있다. 속성으로name
,column
옵션을 지정할 수 있다.name
옵션 : 특정 필드의 칼럼명을 오버라이드하고자할 때 유용하다.column
옵션 : 칼럼명, 길이, Null 여부 등을 지정할 수 있다.임베디드 타입에 칼럼 속성을 지정해보자.
예시를 보면, ContactPerson 클래스에 있는
firstName
필드를contact_first_name
칼럼으로 매핑하고,lastName
필드를contact_last_name
칼럼으로 매핑하고,phone
필드를contact_phone
칼럼으로 매핑한다Entity 필드에 Enum 타입 필드 사용.
Entity 내 필드를 Enum 클래스로 사용할 때도 있다.
@Enumerated(EnumType.STRING)
EnumType이라는 Enum을 확인해보면 2가지를 지원한다.
ORDINAL
: 필드들을 순서의 수로 나타내어 DB에 저장한다.STRING
: Enum의 name 값을 DB에 저장한다.