값 타입
기본 타입
- vendor에 맞는 타입으로 매칭된다.
embedded 타입
- 객체 형태로 composition(Has-A) 관계인 경우를 의미한다.
@Embeddable class Address { private String address; private String detail; private String zipCode; } @Entity class A { @Id @GeneratedValue(strategy = GenerationType.AUTO) private Long id; @Embedded private Address addressSet; } @Embeddable: 값 타입 정의하는 곳에 표시@Embedded: 값 타입을 사용하는 곳에 표시@AttributeOverride(s)로 속성을 재정의할 수도 있다.- 값 타입이 null이면 내부 필드에 매핑된 테이블 컬럼이 모두 null이 된다.
- 값 타입은 공유 참조가 되면 꽤 위험하다. copy해서 넘기는 방법이 최선이다.
- 최대한 불변객체로 만들어야 한다.
값 타입 컬렉션
- 값을 하나 이상 저장하려면 Collection에 보관하고
@ElementCollection,@CollectionTable을 사용하면 된다.
@Entity
public class Member {
@Id
@GeneratedValue
private Long id;
@ElementCollection
@CollectionTable (name = "FAVORITE_FOODS", joinColumns = @JoinColumn (name = "MEMBER_ID") )
@Column (name="FOOD_NAME" )
private Set<String> favoriteFoods = new HashSet<String>() ;
@ElementCollection
@CollectionTable (name = "ADDRESS", joinColumns = @JoinColumn (name = "MEMBER_ID") )
private List<Address> addressHistory = new ArrayList<Address> () ;
}
- 값 타입 컬렉션은 cascade, orphan removal을 모두 가진다고 보면 된다.