@Embeddable
애노테이션이란?
- 필드 혹은 속성을 임베드 가능한 클래스로 지정하는데 사용한다.
- 임베드 가능한 클래스란, 고유한 기본 키가 없는 관련 필드 그룹을 나타내는데 사용된다.
- 일반적으로 엔티티 내에서 관련 열을 함께 그룹화하는데 사용된다.
- 몇몇 필드를 분리된 클래스로 캡슐화하는데 이용된다.
- 엔티티와 함께 컬럼으로 직접 매핑된다.
아래는 주소 정보를 임베드 가능한 클래스로 구성한 예이다.
@Embeddable
public class Address {
private String street;
private String city;
private String state;
private String zipCode;
// getters, setters, etc.
}
@Embeddable
애노테이션 클래스의 필드 내에서는@Id
애노테이션을 사용하면 안된다.- 임베드 되는 엔티티에서 식별자를 사용하기 때문이다.
- 포함된 엔티티와 독립적으로 쿼리, 유지, 병합 또는 제거할 수 없다.
- 자바 내부에서만 개념적으로 나뉘어진 것이다.
@Embedded
애노테이션이란?
@Embeddable
로 정의된 클래스를 이용할 때 사용된다.
@Entity
public class User {
@Id
private Long id;
private String name;
@Embedded
private Address address;
// getters, setters, etc.
}
User
엔티티는 결과 컬럼으로street
,city
,state
,zipcode
,id
,name
을 갖게 될 것이다.
@AttributeOverride
란?
@Embedded
로 삽입한 임베드된 컬럼의 이름이 겹칠 때 다른 이름으로 매핑하는 용도로 주로 사용한다.
@Entity
public class Person {
@Id
private Long id;
private String name;
@Embedded
@AttributeOverrides({
@AttributeOverride(name = "street", column = @Column(name = "home_street")),
@AttributeOverride(name = "city", column = @Column(name = "home_city")),
@AttributeOverride(name = "zipCode", column = @Column(name = "home_zip_code"))
})
private Address homeAddress;
@Embedded
@AttributeOverrides({
@AttributeOverride(name = "street", column = @Column(name = "office_street")),
@AttributeOverride(name = "city", column = @Column(name = "office_city")),
@AttributeOverride(name = "zipCode", column = @Column(name = "office_zip_code"))
})
private Address officeAddress;
// getters, setters, etc.
}
반응형
'프레임워크 > JPA (Java Persistence API)' 카테고리의 다른 글
JPA 에서 LocalDateTime 사용하기 (0) | 2023.08.06 |
---|---|
왜 @Entity 는 인수가 없는 생성자가 필요하고 final 이면 안되는가? (0) | 2023.08.05 |
@Entity 애노테이션이란? (0) | 2023.08.05 |
@SecondaryTables 애노테이션이란? (0) | 2023.08.05 |