2016-08-07 3 views
3

나는 분야 중 하나가 키 열거와지도 인 엔티티 만들려고하는지도 :JPA 매핑 키가 열거

public class MyEntity { 

    @ElementCollection 
    @CollectionTable(name="attributes", [email protected](name="my_entity_id")) 
    @MapKeyColumn(name = "attribute_key") 
    @Column(name="attribute_value") 
    private Map<Attribute, String> attributes; 
} 

Attribute이 추가 필드 단순한 열거입니다 또는 논리 :

public enum Attribute { 
    ATTRIBUTE1, ATTRIBUTE2, ATTRIBUTE3; 
} 

이지도는 멋지게 작동하며 작동합니다. 하지만 컬렉션 테이블 인 attributes은 내 맵 키에 대해 integer 열 정의를 사용하여 생성합니다. 기본값은 EnumType.ORDINAL입니다. 내 목적을 위해 나는 문자열이 필요하지만 예외로 인도하기 때문에 나는 단지 @Enumerated(EnumType.STRING)을 내 필드에 놓을 수는 없다.

원하는 동작을 어떻게 달성 할 수 있습니까? 대단히 감사합니다. @BilalBOUTAYA

+6

시도 @MapKeyEnumerated (EnumType.STRING). http://stackoverflow.com/questions/25439813/difference-between-mapkey-mapkeycolumn-and-mapkeyjoincolumn-in-hibernate –

+0

네, 그게 내가 찾고 있던 것입니다! 고마워요! – DruidKuma

+0

환영합니다. 행복하게 도와줍니다. –

답변

4

명예는 대답은 : @MapKeyEnumerated를 사용합니다.

주석은 명백하게 주석과 호환되지 않는 값 열에 적용됩니다.

예 :

@JsonIgnore 
@ElementCollection(fetch = FetchType.LAZY) 
@CollectionTable(name = "FTT_REGISTRI_ESCLUSIONI", foreignKey = @ForeignKey(value = ConstraintMode.CONSTRAINT, name = "FTT_FK_ESCLUSIONE_TO_REGISTRO"), joinColumns = @JoinColumn(name = "REGISTRO_ID")) 
@MapKeyColumn(name = "CLAUSOLA_ESCLUSIONE", length = 40, nullable = false) 
@MapKeyClass(FttEsclusioneType.class) 
@MapKeyEnumerated(EnumType.STRING) 
@Column(name = "RECORD_COUNT", nullable = false) 
protected final Map<FttEsclusioneType, Long> esclusioneRecordCounters = new HashMap<>();