@Id
)int
, long
, double
)Integer
, Long
, Double
)String
@Embedded
값 타입을 정의하는 곳에 표시
@Embeddable
값 타입을 사용하는 곳에 표시
@Entity
@Table(name = "MEMBERS")
public class Member {
@Id
@GeneratedValue
private Long id;
private String name;
@Embedded
private Period period;
@Embedded
private Address address;
}
@Embeddable
public class Period {
private LocalDate startDate;
private LocalDate endDate;
}
@Embeddable
public class Address {
@Column(length = 100)
private String city;
private String street;
@Column(length = 100)
private String zipCode;
}
@AttributeOverride
매핑 정보 재정의
@Entity
@Table(name = "MEMBERS")
public class Member {
@Id
@GeneratedValue
private Long id;
private String name;
@Embedded
private Period period;
@Embedded
@AttributeOverrides({
@AttributeOverride(name = "city", column = @Column(name = "COMPANY_CITY")),
@AttributeOverride(name = "street", column = @Column(name = "COMPANY_STREET")),
@AttributeOverride(name = "zipCode", column = @Column(name = "COMPANY_ZIPCODE"))
})
private Address address;
}
@ElementCollection
@CollectionTable
값 타입 컬렉션은 기본적으로 영속성 전이(Cascade)
, 고아 객체 제거 (Orphan Remove)
기능이 설정된다.
값 타입 컬렉션에 변경 사항이 발생하면, 매핑된 테이블 전체를 삭제한 후 다시 저장한다.
값 타입 컬렉션과 매핑된 테이블은 모든 컬럼을 묶어서 기본 키로 구성해야 한다.
그냥 @OneToMany
를 활용하는 것을 추천.
@Entity
@Table(name = "MEMBERS")
public class Member {
@Id
@GeneratedValue
private Long id;
@Embedded
private Address address;
@ElementCollection
@CollectionTable(name = "FAVORITE_FOODS", joinColumns = @JoinColumn(name = "MEMBER_ID"))
private Set<String> favoriteFoods = new HashSet<>();
@ElementCollection
@CollectionTable(name = "ADDRESS_HISTORY", joinColumns = @JoinColumn(name = "MEMBER_ID"))
private List<Address> addressHistory = new ArrayList<>();
}
https://galid1.tistory.com/592