8
votes

Comment mapper un ensemble de type ENum en hibernate?

Dans Hibernate, est-il possible de définir une cartographie pour une classe à un ensemble d'énums?

J'ai été en mesure de trouver des exemples de définir les mappages des ensembles et j'ai été en mesure de trouver des exemples séparés pour mapper Enums, mais je ne peux pas comprendre comment définir un d'énumérums pour une classe. < / p>

Quelqu'un pourrait-il s'il vous plaît me fournir un exemple?

Ceci est en cours de construction sur une application existante, je ne peux donc pas modifier le schéma de base de données.

C'est la relation que je souhaite modéliser. Wicket est une classe normale et WicketType est une java Enum. xxx

merci encore


1 commentaires

Pourriez-vous fournir un exemple?


3 Réponses :


2
votes

fait Ce non Faites ce dont vous avez besoin?

Élaborer sur la réponse initiale flippante, la référence fournit un moyen d'utiliser l'ordinal de l'énumération pour la mapper des énumérations. P>

Dans ce cas, il est en fait plus simple qu'il n'y paraît que Vous hébergez les Enums dans un ensemble, vous devez fournir un accesseur pour le WicketType au sous-type d'Intémassertype, le super-type veillera à la cartographie de l'ordinal à l'instance. P>

<hibernate-mapping package="test">
  <class name="WicketTypeState" lazy="true" table="WicketType">
    <id name="WicketType" 
      type="test.WicketTypeState"/>
  </class>
</hibernate-mapping>


12 commentaires

Non-- Cela a un moyen de cartographier une énumération, mais ne spécifie pas comment utiliser cet énumé dans un ensemble mappé.


Par mon commentaire, pouvez-vous offrir un exemple? Une fois que vous avez défini comment mapper un énumé à l'aide de l'ordinal, vous n'avez-vous que besoin d'ajouter l'intenumusertype en tant que classe dans la cartographie définie?


Merci pour ton aide. J'ai fourni un exemple plus clair de ce que j'essaie de faire. Je vais essayer de spécifier l'énumuseerType en tant que classe dans la cartographie .


Où vous spécifiez les mappages de la table ENUM (deuxième bloc de code ci-dessus) - D'où vient le nom de la propriété "State"?


C'est une erreur de copie-coller, il suffit de mettre en place un type de test pour vérifier les mappages.


Cela peut-il faire référence à la table moyenne à plusieurs dans l'exemple plus détaillé? Je ne peux pas comprendre comment faire de l'hibernation pour chercher la relation là-bas ...


Désolé, j'ai totalement manqué les nombreuses relations. Cette mise en œuvre est un nombre. Pour en faire beaucoup, beaucoup, la cartographie de WicketTypeState doit également définir un ensemble ainsi que le WicketType doit spécifier la sauvegarde doit être en cascade. Je vais le mettre à jour quand de retour à un ordinateur approprié.


Qu'est-ce que cela signifie d'avoir une relation nombreuses ici, avez-vous un champ dans les instances de WicketType pour les instances de guichet associées?


Non, désolé pour cette confusion. C'est vraiment une relation unique qui permet à Wicket d'avoir de nombreux wicketypes (comme un ensemble normal permet), avec cette relation enregistrée dans la table de la recherche moyenne. Je modifierai la question pour décrire plus précisément ceci.


S'il est un à plusieurs, mais contre la table de référence, changez simplement la déclaration de la table dans WicketType.hbm.xml pour pointer vers la table Ref et ajouter une autre relation standard une-un à une à la table de WicketType.


aucun problème. Un point de plus qui pourrait aider, l'État de WicketType pourrait facilement être gagné générique en passant l'énum enum comme un argument de constructeur (bien que je ne connaisse pas assez bien avec Hibernate pour savoir cartographier le constructeur)


Juste une tête up: le lien vers les documents Hibernate est cassé. J'aurais pris un coup d'œil à ce qu'il a pointé si cela a fonctionné ...



3
votes

Le code d'échantillon ci-dessous montre comment ce que vous voulez être réalisé avec des annotations.

public enum WicketType {
   WICKET_TYPE1, WICKET_TYPE2 ...
}


1 commentaires

Utilisez @ElementCollection au lieu de @collectionfelements avec hibernate 4



4
votes

Un moyen plus simple est xxx


1 commentaires

Merci, était aussi simple que cela