2013-08-07 3 views
1

저는 JPA의 초보자이며 이에 대한 좋은 Google 솔루션을 찾을 수 없었습니다. 문자열의 LinkedHashMap에 JPA 어노테이션을 설정하려고합니다. 여기에 비틀기가 있는데, 나는 mappedSuperClass로 매핑하고있는 추상 클래스를 가지고있다. 따라서이 수퍼 클래스의 모든 구현에는 문자열의 LinkedHashMap이 있습니다. 내 예가 여기에 있습니다.JPA LinkedHashMap annotations

@MappedSuperclass 
public abstract class AbstractCustomerType implements Serializable 
{ 

@ElementCollection //is this right? 
protected LinkedHashMap<String, String> customerData; 
} 

데이터베이스에 어떤 내용이 있습니까? customerData의 자체 조인 테이블을 갖는 AbstractCustomerType의 각 구현은 무엇입니까? 이 경우 10 개의 CustomerTypes가 있으면 10 개의 customerData 테이블을 갖게됩니까? 모든 customerTypes에서 공유되는 customerData 테이블을 하나만 가져올 수 있도록이 주석을 어떻게 작성합니까?

답변

0

@CollectionTable 주석을 사용하여 단일 테이블을 정의 해보십시오. 또한 귀하의 ID가 서브 클래스간에 고유하다는 것을 확인하십시오 (동일한 순서 사용).

JOINED 상속 사용을 고려해보십시오.

JPA는 기술적으로 인터페이스 만 허용하지만 EclipseLink는 구현을 허용합니다 (dev builds (2.6)의 EAGER 또는 LAZY 경우).

2

전혀 작동하지 않습니다. 영구 컬렉션은 Map, Set 또는 List와 같은 구체적인 유형이 아니라 인터페이스 유형으로 입력해야합니다. HashMap, LinkedHashMap, HashSet 또는 ArrayList는 입력 할 수 없습니다.

페이지를 참조하십시오 23 the specification의 :

컬렉션 값 지속 필드와 속성에 관계없이 엔티티 클래스 그렇지 않으면 자바 빈즈 방법 규칙을 준수하는지 여부의 다음 콜렉션 값 인터페이스 중 하나의 관점에서 정의되어야합니다 필드 또는 속성 액세스가 사용되는지 여부 : java.util.Collection, java.util.Set, java.util.List, java.util.Map.