105 votes

Collection de cartes JPA d'Enums

Existe-t-il un moyen dans JPA de mapper une collection d'énums au sein de la classe Entity? Ou la seule solution consiste à envelopper Enum avec une autre classe de domaine et à l'utiliser pour mapper la collection?

 @Entity
public class Person {
    public enum InterestsEnum {Books, Sport, etc...  }
    //@???
    Collection<InterestsEnum> interests;
}
 

J'utilise l'implémentation Hibernate JPA, mais je préférerais bien sûr une solution indépendante de l'implémentation.

75voto

spaaarky21 Points 1135

Le lien dans la réponse de Andy est un excellent point de départ pour mapper des collections d'objets "non-Entity" dans JPA 2, mais il n'est pas assez complet en matière de mappage. Voici ce que je suis venu à la place.

 @Entity
public class Person {
    @ElementCollection(targetClass=InterestsEnum.class)
    @Enumerated(EnumType.STRING) // Possibly optional (I'm not sure) but defaults to ORDINAL.
    @CollectionTable(name="person_interest")
    @Column(name="interest") // Column name in person_interest
    Collection<InterestsEnum> interests;
}
 

0voto

cletus Points 276888

Les collections dans JPA font référence à des relations un-à-plusieurs ou plusieurs-à-plusieurs et elles ne peuvent contenir que d'autres entités. Désolé, mais vous devez envelopper ces enums dans une entité. Si vous y réfléchissez, vous aurez de toute façon besoin d’un champ d’identification et d’une clé étrangère pour stocker ces informations. C’est à moins que vous ne fassiez quelque chose de fou, comme stocker une liste séparée par des virgules dans une chaîne (ne le faites pas!).

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X