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

Hibernate Java Discussion :

[Hibernate] Mapper une relation one-to-one pour acces par login/pass


Sujet :

Hibernate Java

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé
    Profil pro
    Inscrit en
    Avril 2006
    Messages
    370
    Détails du profil
    Informations personnelles :
    Localisation : France, Puy de Dôme (Auvergne)

    Informations forums :
    Inscription : Avril 2006
    Messages : 370
    Par défaut [Hibernate] Mapper une relation one-to-one pour acces par login/pass
    Voila, j'ai besoin de definir un acces par login/pass à mon application, et je ne sais pas trop quel manière de faire serait le mieux avec Hibernate :

    Pour le moment j'ai fait une table User :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    CREATE TABLE utilisateurs
    (
      id int8 NOT NULL,
      nom varchar(20) NOT NULL,
      prenom varchar(20) NOT NULL,
      societe varchar(20),
      quota_aut int8 NOT NULL,
      quota_cour int8,
      adresse varchar(100) NOT NULL,
      cp int8 NOT NULL,
      ville varchar(30) NOT NULL,
      tel varchar(10) NOT NULL,
      CONSTRAINT utilisateurs_pkey PRIMARY KEY (id)
    )
    Une table authentification :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    CREATE TABLE authentification
    (
      id int8 NOT NULL,
      "login" varchar(20) NOT NULL,
      pass varchar(32) NOT NULL,
      "user" int8,
      CONSTRAINT authentification_pkey PRIMARY KEY (id),
      CONSTRAINT authentification_user_fkey FOREIGN KEY ("user")
          REFERENCES utilisateurs (id) MATCH SIMPLE
          ON UPDATE CASCADE ON DELETE CASCADE
    )
    j'ai crée un objet authentification :

    j'ai mappé l'user et l'authentification comme suit (one-to-one bidirectionnelle) :
    coté User:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    <many-to-one name="authentification" 
            column="user" 
            unique="true"
            not-null="true"/>
    coté authentification :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    <one-to-one name="user" cascade="save-update,delete" />

    Or mon code me paraît bancale, ais-je eu tord de séparer user et son login/pass (dans la base, dans le code, dans les 2) ?

    J'avais aussi pensé à définir une simple jointure au niveau de l'User et ajouter les elements login et pass aux attributs de la classe User.

    En gros je ne sais pas quel serait le mapping optimal pour ce que je souhaite réaliser :

    A partir du login/pass retrouver l'User (pratique pour connexion)
    Avec l'User avoir login/Pass (pratique pour modif)

    et avec un code le plus simple,propre possible.

  2. #2
    Membre éclairé
    Profil pro
    Inscrit en
    Avril 2006
    Messages
    370
    Détails du profil
    Informations personnelles :
    Localisation : France, Puy de Dôme (Auvergne)

    Informations forums :
    Inscription : Avril 2006
    Messages : 370
    Par défaut
    Petit up pour savoir ce que vous en pensez ??

    Et voila comment je m'y prend pour voir si le login/pass entré est correct :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    StringBuffer queryString = new StringBuffer();
    		queryString.append("from User us where us.authentification.login = :login and us.authentification.pass = :pass");
    		org.hibernate.Query query = s.createQuery(queryString.toString());
    		query.setString("login","login");
                    query.setString("pass","pass");
    		List<User> result =(List<User>) query.list();
    La encore ma requète ne me parais pas optimale, mais je n'est pas vraiment compris l'utilisation des join etc ...

    Donc voila si vous saviez comment rendre l'ensemble plus performant,joli ...

  3. #3
    Membre éclairé
    Profil pro
    Inscrit en
    Avril 2006
    Messages
    370
    Détails du profil
    Informations personnelles :
    Localisation : France, Puy de Dôme (Auvergne)

    Informations forums :
    Inscription : Avril 2006
    Messages : 370
    Par défaut
    Aller pti up, il est optimal mon one-to-one ? Et ma requète je ne la trouve pas très propre, ni très orientée objet en fait.

  4. #4
    Membre éclairé
    Profil pro
    Inscrit en
    Avril 2006
    Messages
    370
    Détails du profil
    Informations personnelles :
    Localisation : France, Puy de Dôme (Auvergne)

    Informations forums :
    Inscription : Avril 2006
    Messages : 370
    Par défaut
    Bon bon bon , donc voila, dans la configuration actuelle, l'objet Authentification a une vie propre en dehors de sa relation avec User.
    Ainsi, si je veux enregistrer un nouvel user et donc enregistrer ses identifiants, il me faut faire persister l'objet Authentification avant de pouvoir l'ajouter a l'user puis persister l'User.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    Authentification auth;
    User us;
    auth.persist();
    us.setAuth(auth);
    us.persist();
    Alors que moi j'aimerai bien pouvoir simplement ajouter l'authentification a l'User et persister le tout. Mais pour le moment je me prend une exception comme quoi l'objet auth est null ou transcient donc pas possible de le persister de la sorte.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    User us;
    Authentification auth;
    us.setAuth(auth);
    us.persist();

Discussions similaires

  1. Réponses: 2
    Dernier message: 12/03/2010, 16h10
  2. Mapper une relation de generalisation dans un DC avec hibernate
    Par thaundeadboss dans le forum Hibernate
    Réponses: 0
    Dernier message: 30/06/2009, 10h26
  3. hibernate 3 et relation many-to-one
    Par the_frogkiller dans le forum Hibernate
    Réponses: 1
    Dernier message: 01/05/2009, 13h35
  4. problème de jointure dans une relation many to one
    Par info_plus dans le forum JPA
    Réponses: 1
    Dernier message: 25/12/2008, 12h29
  5. Hibernate : suppression sur relation many to one
    Par taf dans le forum Hibernate
    Réponses: 1
    Dernier message: 23/05/2006, 13h08

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