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 :

Clé composite autogénérée


Sujet :

JPA Java

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Candidat au Club
    Homme Profil pro
    Développeur Java
    Inscrit en
    Juillet 2011
    Messages
    2
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Développeur Java
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Juillet 2011
    Messages : 2
    Par défaut Clé composite autogénérée
    bonjour à tous,

    Je développe une application multi utilisateurs.
    Chaque utilisateur peut travailler en local et met à jour une DB java locale.
    Lorsqu'un utilisateur se connecte à internet, sa database est synchronisée avec une database globale située sur un server.

    Mon problème est le suivant:

    comment générer les clés pour les nouveaux éléments ajoutés aux databases locales ?
    Une solution serait de générer des clés uniques localement, et de laisser au server le soin d'attribuer des clés uniques globales, mais cette solution me parait compliquée à mettre en oeuvre.
    La solution qui me parait plus simple est d'attribuer au niveau local une clé qui serait unique au niveau global.
    Je pensais créer une telle clé en composant un identifiant propre à chaque utilisateur et un id local généré par JPA
    En lisant la doc JPA concernant les clé composées, il semble préferable d'utiliser une clé embedded, au lieu d'une @IdClass.
    Cependant, dans le cas de l'embedded key, je n'arrive pas à faire en sorte que la partie locale de la clé soit générée automatiquement.

    Voici mes questions:

    -mon approche (clé unique composée d'un identifiant global utilisateur+ identifiant local autogénéré) vous semble-t'elle la meilleure ?

    -est-il possible d'avoir une embedded key avec un de ces composants autogénéré ?

    merci beaucoup pour tout élément de réponse

  2. #2
    Membre éclairé
    Homme Profil pro
    Développeur Java
    Inscrit en
    Avril 2007
    Messages
    375
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loir et Cher (Centre)

    Informations professionnelles :
    Activité : Développeur Java
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2007
    Messages : 375
    Par défaut
    Je pense que générer un identifiant comme tu fais est une bonne idée. Il faut bien sur que le code utilisateur soit unique.

    Pour la deuxième question, (je débute aussi en JPA), tu as pensé à créer une table séquence dans ta base et utiliser un "séquence manager" pour récupérer le prochain id ? Le nom de la séquence serait le code utilisateur.
    Avec une fonction du genre
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    public synchronized long next(String sequence);
    Tu récupère donc le nombre qui suit, et tu y ajoute le code utilisateur.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    String id = id + sequenceManager.next(id)
    Dis moi ce que tu en penses, en espérant avoir été clair

  3. #3
    Candidat au Club
    Homme Profil pro
    Développeur Java
    Inscrit en
    Juillet 2011
    Messages
    2
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Développeur Java
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Juillet 2011
    Messages : 2
    Par défaut
    Romain,

    merci pour ta réponse.

    je pense que ton idée de séquence est intéressante. Elle me permettrait même de ne pas devoir utiliser une clé composite.
    Mon idée serait alors de générer une séquence propre à chaque utilisateur, qui commencerait à une valeur = id de l'utilisateur * 2^16.
    Cette sequence seraient utilisée par jpa, par exemple:

    @SequenceGenerator(name="global_seq", sequenceName="global_seq")
    @Id @GeneratedValue(generator="global_seq")

    De cette façon, le long généré par jpa aurait ses 16 premiers bits propres à l'utilisateur, et les 16 serviraient d'id local.



    qu'en penses-tu ?

Discussions similaires

  1. Réponses: 15
    Dernier message: 14/12/2004, 18h01
  2. [FLASH MX2004][AS2] Composition
    Par bolo dans le forum Flash
    Réponses: 9
    Dernier message: 10/12/2004, 16h53
  3. Aide sur la création d'un type simple (nom composite)
    Par testeur dans le forum PostgreSQL
    Réponses: 1
    Dernier message: 06/11/2004, 20h30
  4. clés composites
    Par Yuna dans le forum Administration
    Réponses: 12
    Dernier message: 08/01/2004, 09h14
  5. [WSAD] Composition visuelle d'une applet
    Par schum11 dans le forum Eclipse Java
    Réponses: 1
    Dernier message: 09/04/2003, 16h19

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