특징

  • 자바 객체에서 Value-type과 Entity를 구분지을 수 있는것은 식별자 속성 뿐이다.
  • 컴포넌트와 Entity 간의 양방향 관계를 설정할 수 있다.
  • 컴포넌트가 다른 컴포넌트나 Entity를 가지고 있을 수 있다.

    • This flexibility is the foundation of Hibernate's support for finegrained object models.

설정하기

  • 컴포넌트에는 @Embeddable Entity의 속성에는 @Embedded 사용하기
  • @org.hibernate.annotations.Parent 애노테이션으로 컴포넌트에서 back-pointer 프로퍼티 사용 가능.
  • if you store a component object with all null property
    values, Hibernate returns a null component when the owning entity
    object is retrieved from the database.
컴포넌트 사용하기
@Entity
@Table(name = "USERS")
public class User {
@Embedded
private Address homeAddress;


}
컴포넌트 클래스 정의하기
@Embeddable
public class Address {

@Column(name="ADDRESS_STREET", nullable=false)
private String street;

@Column(name="ADDRESS_ZIPCODE", nullable=false)
private String zipcode;

@Column(name="ADDRESS_CITY", nullable=false)
private String city;

}
  • 컴포넌트를 사용하는 쪽에서 컴포넌트의 컬럼 정의를 재정의 할 수도 있다.
  • 단점

    • First,shared references, as for all value types, aren't possible. -> 이건 value-type 이니까 당연히 그래야 하는거 아닌가.
    • Second, there is no elegant way to represent a null reference to an Address. -> 흠.. new Address()를 항상 가지고 있어야겠군.