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

  1. #1
    Membre actif
    Inscrit en
    avril 2006
    Messages
    346
    Détails du profil
    Informations forums :
    Inscription : avril 2006
    Messages : 346
    Points : 252
    Points
    252
    Par défaut [NHibernate] Génération de l'identifiant d'une table dont la valeur est stockée dans une table de référence
    Bonsoir,

    l'identifiant d'une table est une chaîne de caractères préfixés par 2 lettres suivi d'un nombre incrémenté de 1 à chaque nouvel enregistrement.
    Ce nombre est stocké dans une table de référence.

    Ainsi, lors de la création d'un nouvel enregistrement, il faut pour générer l'identifiant:
    - lire le compteur sauvegardé dans la table de référence,
    - incrémenter de 1,
    - préfixer ce nombre par 2 lettres,
    - enregistrer le nouvel enregistrement,
    - sauvegarder la nouvelle valeur du compteur dans la table de référence

    Est-il possible que NHibernate génère l'identifiant du nouvel enregistrement lors de l'ajout dans la base de données en réalisant les actions décrites ci-dessus ?

    Merci d'avance,
    Zoax

  2. #2
    Rédacteur/Modérateur


    Homme Profil pro
    Développeur .NET
    Inscrit en
    février 2004
    Messages
    19 872
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France, Paris (Île de France)

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

    Informations forums :
    Inscription : février 2004
    Messages : 19 872
    Points : 39 718
    Points
    39 718
    Par défaut
    C'est possible, mais pas très simple... il faut que tu implémentes un générateur d'identité, c'est à dire une classe qui implémente IIdentifierGenerator. Tu trouveras (un peu) plus de détails ici... la doc de NHibernate est malheureusement presque inexistante

    Mais cette approche n'est pas très recommandée... en tous cas Ayende Rahien dit qu'il vaut mieux l'éviter, et vu que c'est certainement un des plus grands experts de NHibernate, j'aurais tendance à le croire

    Si tu peux, il vaudrait mieux modifier un peu la structure de la base : crée une nouvelle clé primaire numérique, et change ta clé primaire actuelle pour que ce ne soit plus une clé primaire mais une simple colonne avec une contrainte d'unicité

  3. #3
    Membre actif
    Inscrit en
    avril 2006
    Messages
    346
    Détails du profil
    Informations forums :
    Inscription : avril 2006
    Messages : 346
    Points : 252
    Points
    252
    Par défaut
    Bonsoir Tomlev,

    merci une fois de plus pour la réponse.

    Citation Envoyé par tomlev
    Si tu peux, il vaudrait mieux modifier un peu la structure de la base : crée une nouvelle clé primaire numérique, et change ta clé primaire actuelle pour que ce ne soit plus une clé primaire mais une simple colonne avec une contrainte d'unicité
    Et non malheureusement je ne peux pas modifier la structure de la base.

    Penses-tu que je devrais gérer l'incrémentation dans la couche métier en incluant toutes les étapes au sein d'une transaction ?

    Merci d'avance,
    Zoax

  4. #4
    Rédacteur/Modérateur


    Homme Profil pro
    Développeur .NET
    Inscrit en
    février 2004
    Messages
    19 872
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France, Paris (Île de France)

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

    Informations forums :
    Inscription : février 2004
    Messages : 19 872
    Points : 39 718
    Points
    39 718
    Par défaut
    Citation Envoyé par zoaax Voir le message
    Penses-tu que je devrais gérer l'incrémentation dans la couche métier en incluant toutes les étapes au sein d'une transaction ?
    A vrai dire je ne sais pas trop... mais il me semble que ce genre de chose n'a rien à faire dans la couche métier, vu que c'est lié à l'accès aux données

  5. #5
    Membre expert Avatar de iberserk
    Homme Profil pro
    Architecte de base de données
    Inscrit en
    novembre 2004
    Messages
    1 792
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Architecte de base de données
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : novembre 2004
    Messages : 1 792
    Points : 3 126
    Points
    3 126
    Par défaut
    Posez un TRIGGER INSTEAD OF INSERT sur votre table qui gérera celà proprement.
    Prendre conscience, c'est transformer le voile qui recouvre la lumière en miroir.
    MCTS Database Development
    MCTS Database Administration

  6. #6
    Membre actif
    Inscrit en
    avril 2006
    Messages
    346
    Détails du profil
    Informations forums :
    Inscription : avril 2006
    Messages : 346
    Points : 252
    Points
    252
    Par défaut
    Bonjour,

    merci pour la réponse.
    En réalité, je ne peux malheureusement apporter aucune modification à la base.
    C'est dommage. Faut que je fasse avec.

    Merci
    Zoax

Discussions similaires

  1. Réponses: 5
    Dernier message: 11/10/2010, 09h16
  2. [MySQL] Problème pour afficher une image dont le chemin est stocké dans la bdd
    Par cel.Saint-Louis dans le forum PHP & Base de données
    Réponses: 2
    Dernier message: 12/11/2007, 08h49
  3. Réponses: 4
    Dernier message: 22/02/2007, 10h01
  4. [XSLT] Attribut dont le nom est stocké dans une variable ?
    Par Xfennec dans le forum XSL/XSLT/XPATH
    Réponses: 2
    Dernier message: 15/03/2006, 11h20
  5. Réponses: 7
    Dernier message: 25/10/2005, 15h19

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