둘 다 일대 다 관계에서 작동하므로 a @OneToMany
와 @ElementCollection
주석을 사용하는 것의 차이점은 무엇입니까 ?
둘 다 일대 다 관계에서 작동하므로 a @OneToMany
와 @ElementCollection
주석을 사용하는 것의 차이점은 무엇입니까 ?
답변:
ElementCollection
표준 JPA 주석으로, 이제 독점적 인 Hibernate 주석보다 선호됩니다 CollectionOfElements
.
이는 컬렉션이 엔터티 컬렉션이 아니라 단순 유형 (문자열 등)의 컬렉션 또는 포함 가능한 요소의 컬렉션 (으로 주석이 달린 클래스)임을 의미 @Embeddable
합니다.
또한 요소가 포함 된 엔터티가 완전히 소유하고 있음을 의미합니다. 엔터티가 수정되면 수정되고, 엔터티가 삭제되면 삭제됩니다. 자체 수명주기를 가질 수 없습니다.
@ElementCollection
단순 또는 포함 된 유형으로 일대 다 관계를 구현하려는 경우 코드를 단순화 할 수 있습니다. 예를 들어 JPA 1.0에서의 목록에 대해 일대 다 관계를 원할 때 기본 키와 해당 항목 만 포함 String
하는 간단한 엔터티 POJO ( StringWrapper
) 를 만들어야했습니다 String
.
@OneToMany
private Collection<StringWrapper> strings;
//...
public class StringWrapper {
@Id
private int id;
private String string;
}
JPA 2.0을 사용하면 다음과 같이 간단히 작성할 수 있습니다.
@ElementCollection
private Collection<String> strings;
더 간단하지 않습니까? @CollectionTable
주석을 사용하여 테이블 및 열 이름을 계속 제어 할 수 있습니다 .
ElementCollection은 해당 컬렉션에 대한 매핑 또는 테이블을 재정의 할 수 있으므로 여러 엔터티가 동일한 Embeddable 클래스를 참조하도록 할 수 있지만 각각 별도의 테이블에 종속 개체를 저장하도록 할 수 있습니다.