Si je vous comprends bien, pour un ENUM comme:
public enum Color { RED, GREEN, BLUE; }
vous auriez 3 colonnes vrai/faux dans une base de données, une pour chaque valeur possible de ENUM. Ensuite, un EnumSet
contenant, par exemple, ROUGE et BLEU, doivent être mises en correspondance:
RED GREEN BLUE
true false true
Si tel est le cas, la seule façon que je connaisse est d'écrire votre propre implémentation de org.hibernate.usertype.UserType
. C'est une tâche assez simple, avec quelques exemples disponibles sur le site Hibernate et, par exemple, here.
Édition: Je viens de me rendre compte que les choses devraient être un peu plus complexes. Si vous souhaitez avoir un mappage de type Hibernate pour tous EnumSet
possible dans votre application, vous devrez effectuer les opérations suivantes:
- Utilisez
org.hibernate.usertype.ParameterizedType
et faire le type d'utilisateur par une classe paramétrable enum.
- En fonction des valeurs de la classe enum, déterminez le nombre et les colonnes à lire/écrire.
- Instancier le type chaque fois qu'un
EnumSet
est utilisé.
- Considérons la possibilité de mapper plusieurs ensembles dans une table, ainsi que l'ajout d'une nouvelle valeur enum influencera les fonctionnements de type existant.
Cela pourrait facilement correspondre à une journée de travail, mais semble tout à fait faisable. J'espère que vous comprendrez d'ici.
Merci ... Je l'ai fait à la main mais vous avez fourni ce qui est probablement la seule solution. –