IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

JPA Java Discussion :

Mapper une Collection/Set d'enum


Sujet :

JPA Java

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre expérimenté
    Profil pro
    Inscrit en
    Novembre 2006
    Messages
    156
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2006
    Messages : 156
    Par défaut Mapper une Collection/Set d'enum
    Bjr,
    Comment peut-on mapper dans une Entité un attribut de type Set de type énuméré (Set<MyEnum> ).
    Par Exemple
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
     
    enum JOUR_SEMAINE {LUN, MAR, MER, JEU, VEN, SAM, DIM };
     
    @Entity
    public class Employee {
      @Id
      long id;
     
      // Comment mapper ce Set ?
      Set<JOUR_SEMAINE> joursTravail = EnumSet.noneOf(JOUR_SEMAINE.class);
     
    }
    Merci

  2. #2
    Membre Expert Avatar de Uther
    Homme Profil pro
    Tourneur Fraiseur
    Inscrit en
    Avril 2002
    Messages
    4 698
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Pyrénées Orientales (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Tourneur Fraiseur

    Informations forums :
    Inscription : Avril 2002
    Messages : 4 698
    Par défaut
    C'est plutôt vague. Tu veux mapper vers quoi?

  3. #3
    Membre Expert
    Homme Profil pro
    Inscrit en
    Septembre 2006
    Messages
    2 963
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations forums :
    Inscription : Septembre 2006
    Messages : 2 963
    Par défaut
    Citation Envoyé par phantomass Voir le message
    Bjr,
    Comment peut-on mapper dans une Entité un attribut de type Set de type énuméré (Set<MyEnum> ).
    Par Exemple
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
     
    enum JOUR_SEMAINE {LUN, MAR, MER, JEU, VEN, SAM, DIM };
     
    @Entity
    public class Employee {
      @Id
      long id;
     
      // Comment mapper ce Set ?
      Set<JOUR_SEMAINE> joursTravail = EnumSet.noneOf(JOUR_SEMAINE.class);
     
    }
    Merci
    si vous utilisez Hibernate, je dirais : faites un UserType...
    vous pouvez facilement mapper un int à votre Set en l'utilisant comme un bit mask...

  4. #4
    Membre expérimenté
    Profil pro
    Inscrit en
    Novembre 2006
    Messages
    156
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2006
    Messages : 156
    Par défaut
    J'utilise l'implementation JPA d'hibernate, mais je souhaite au maximum dans un 1er temps ne pas utiliser les spécificités d'hibernate qui apparement va beaucoup plus loin que JPA en terme de possibilité de mapping.

    Mon besoin est simple.
    Pour faire simple j'ai définit les jours de la semaine dans un type Java enum.
    Ensuite j'ai une entité Employee qui a un attribut "joursTravail", qui définit les jours de la semaine ou travaille cet employée.
    Il peut donc travailler plusieurs jours( par exemple du lundi ou vendredi).
    Donc j'ai definit cet attribut "joursTravail" comme étant un ensemble de jour de la semaine.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    Set<JOUR_SEMAINE> joursTravail;
    Ma question est comment indiquer le mapping avec JPA pour pouvoir persister cet attribut ?

  5. #5
    Membre Expert
    Homme Profil pro
    Inscrit en
    Septembre 2006
    Messages
    2 963
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations forums :
    Inscription : Septembre 2006
    Messages : 2 963
    Par défaut
    Citation Envoyé par phantomass Voir le message
    J'utilise l'implementation JPA d'hibernate, mais je souhaite au maximum dans un 1er temps ne pas utiliser les spécificités d'hibernate qui apparement va beaucoup plus loin que JPA en terme de possibilité de mapping.

    Mon besoin est simple.
    Pour faire simple j'ai définit les jours de la semaine dans un type Java enum.
    Ensuite j'ai une entité Employee qui a un attribut "joursTravail", qui définit les jours de la semaine ou travaille cet employée.
    Il peut donc travailler plusieurs jours( par exemple du lundi ou vendredi).
    Donc j'ai definit cet attribut "joursTravail" comme étant un ensemble de jour de la semaine.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    Set<JOUR_SEMAINE> joursTravail;
    Ma question est comment indiquer le mapping avec JPA pour pouvoir persister cet attribut ?
    de mémoire : JPA seul ne supporte pas les "set of enum"…
    les enum simples : oui avec @Enumerated…

  6. #6
    Membre expérimenté Avatar de a.snaps
    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    209
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Janvier 2007
    Messages : 209
    Par défaut
    Et non, pas avant JPA 2.0 en tout cas

  7. #7
    Membre expérimenté
    Profil pro
    Inscrit en
    Novembre 2006
    Messages
    156
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2006
    Messages : 156
    Par défaut
    Ce que j'ai fait et qui est moyennement élégant est que j'ai utilisé un type enveloppant mes énum. Et c'est donc ce type qui est persisté.
    L'inconvénient est que mon objet expose 2 getters/setter. Un pour la persitance JPA qui expose les valeurs du type "enveloppe" et un pour la valeur enum elle même.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
     
      /* utilisé par le business  et NON par JPA */
      public JOUR_SEMAINE getJour(){...}
     
      /* utilisé par le business  et NON par JPA */
      public void setJour(JOUR_SEMAINE jour){
        this.jour = jour;
      }
     
     
      // utilisé par la persistance JPA
      public void setJourWrapper(JourSemaineWrapper jourWrapper)
      {
      	this.jourWrapper=jourWrapper;
      	this.jour= jourWrapper.getJour();
      }
      // utilisé par la persistance JPA
      public void getJourWrapper() {...}
    En attendant JPA 2, Je m'attaque maintenant au dev d'une api de Criteria. Très gros manque dans JPA.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Comment mapper une collection d'interface ?
    Par chriscoolletoubibe dans le forum Hibernate
    Réponses: 4
    Dernier message: 21/10/2009, 15h15
  2. Réponses: 2
    Dernier message: 30/05/2008, 04h48
  3. Mapper une collection dans une classe personnalisée
    Par Baptiste Wicht dans le forum JPA
    Réponses: 3
    Dernier message: 18/05/2008, 12h04
  4. mapper une collection
    Par sengra dans le forum Hibernate
    Réponses: 1
    Dernier message: 29/10/2007, 10h42
  5. Comment mapper une colonne de type ENUM ?
    Par KneXtasY dans le forum Hibernate
    Réponses: 15
    Dernier message: 13/06/2007, 17h41

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo