2009-03-05 6 views
4

J'ai un EnumSet que j'ai pensé qu'il serait bon de mapper dans une série de colonnes booléennes. Cela facilitera l'inspection à l'aide d'outils SQL et résiliera également les modifications apportées aux valeurs d'énumération disponibles. Cependant, je ne veux pas vraiment écrire à la main tous les getters et setters pour cela.Puis-je mapper un ensemble EnumSet à une série de colonnes booléennes automatiquement à l'aide des annotations Hibernate?

Quelqu'un a-t-il une solution astucieuse qui utilise un type de métadonnées hibernate pour diviser cet objet en un ensemble de propriétés?

Merci!

Répondre

1

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:

  1. Utilisez org.hibernate.usertype.ParameterizedType et faire le type d'utilisateur par une classe paramétrable enum.
  2. En fonction des valeurs de la classe enum, déterminez le nombre et les colonnes à lire/écrire.
  3. Instancier le type chaque fois qu'un EnumSet est utilisé.
  4. 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.

+0

Merci ... Je l'ai fait à la main mais vous avez fourni ce qui est probablement la seule solution. –

Questions connexes