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 3] Conseils d'utilisation !?


Sujet :

Hibernate Java

  1. #1
    Membre du Club
    Inscrit en
    Janvier 2007
    Messages
    100
    Détails du profil
    Informations personnelles :
    Âge : 40

    Informations forums :
    Inscription : Janvier 2007
    Messages : 100
    Points : 57
    Points
    57
    Par défaut [Hibernate 3] Conseils d'utilisation !?
    Bonjour,

    J'ai hésité à reprendre ce topic (plutot interessant) mais le nom n'ayant plus vriament de rapport, j'ai opté pour un nouveau ...

    En fait, je suis sur un projet (à la bourre pour être original ) et Hibernate à été choisi, j'ai du m'en occuper en partie (pour le mapping plus particulièrement) et vient maintenant le moment de l'utiliser !
    Donc notre "petit" projet Hibernate marche à peu près, je dis à peu près dans la mesure où je ne sais pas utiliser Hibernate et je n'ai donc pas fait tous les tests unitaires nécessaires (juste les get, load, findAll, save, update, delete).
    Je dois encore tester les requêtes plus complexes, mais là je ne sais pas vers quel politique m'orienter. Criteria ? HQL ?

    (1) SQL je pense que c'est à éviter autant que possible, OK ! Mais entre HQL ou Criteria ? Y a-t-il des différences de performances ? Offrent-ils les mêmes possibilités ?

    (2) Je m'interrogeais également sur les objet TableDAO.java sont-ils utilisable et dans quel cas ? Parce que j'ai vu que certaines fonctions de base pouvaient être utilisées par ces classes au lieu d'utilisé la session !

    (3) Selon ce que vous me conseiller (Cirteria ou HQL) des adresses de tutos, cours ou autre (FR ou EN) seraient les biens venus, pour voir comment on l'utilise (bien) et avec si possible à fond, enfin je peux rêver

  2. #2
    Expert confirmé
    Profil pro
    Inscrit en
    Août 2006
    Messages
    3 274
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2006
    Messages : 3 274
    Points : 4 141
    Points
    4 141
    Par défaut
    Je dirais que si les requêtes sont simples, Criteria va bien, sinon je préfère HQL, je trouve ça plus lisible.
    Tu trouveras dans la doc Hibernate, pas mal d'exemples te permettant d'apprendre Criteria et Hql.

  3. #3
    Membre du Club
    Inscrit en
    Janvier 2007
    Messages
    100
    Détails du profil
    Informations personnelles :
    Âge : 40

    Informations forums :
    Inscription : Janvier 2007
    Messages : 100
    Points : 57
    Points
    57
    Par défaut
    Oui j'ai survolé la doc pour HQL et Criteria, elle a l'air plutot digeste et compréhensible pour une prise en main rapide . Ca me rassure ! Pour a réalisation du mapping, je trouve ca plutot compliqué, surtout que je travail pas avec les cas les plus évidents ...

    Donc
    (1) je pars sur HQL dans l'urgence ca a l'air bcp plus simple à assimiler que Criteria ! On verra plus tard si il faut y revenir

    (2) ? personne n'a d'explications ?

    (3) La doc suffira pour l'instant !

  4. #4
    Membre actif 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
    Points : 241
    Points
    241
    Par défaut
    Citation Envoyé par CharlSka
    (2) Je m'interrogeais également sur les objet TableDAO.java sont-ils utilisable et dans quel cas ? Parce que j'ai vu que certaines fonctions de base pouvaient être utilisées par ces classes au lieu d'utilisé la session !
    Tu fais référence à la Pattern Data Access Object j'imagine avec TableDAO?
    C'est un sujet de discussion incessant ici! Car la pattern DAO n'est plus appliquée comme avant, car
    • Une instance retournée par la session hibernate est managée, ainsi toute modification faite à celle-ci sera propagée à la base de données et vraisemblablement persistée ou lancera un Exception (contraint de la base, ...); ce qui n'est pas le "comportement" généralement rencontré avec un DAO.
    • A moitier valable ici, car tu utilises Hibernate directement et non JPA, mais l'abstraction du type de base de données, et par extension 98% des query est gérer par Hibernate et non plus par l'implémentation des DAOs. Dans le cas de JPA, c'est même lui qui gère l'abstraction de l'outil ORM, et il reste peu d'intérêt au DAO...


    Mais je vois l'avantage suivant, dans le cas d'Hibernate et à moitier pour JPA:
    • Le DAO encapsule les requêtes complexes (Queries)! Ainsi la méthode DAO.findValidByReference(String reference) est réutilisable à travers tout le code sans repondre la requête à chaque fois.
    • Pour JPA, ces requêtes deviennent des NamedQueries déclarées au niveau de l'entité même! L'avantage qui reste au DAO au niveau de l'encapsulation est la centralisation des appels à ces derniers et, par extension, la gestion de leurs paramètres. Ainsi toute modifications à la "signature" d'une requête (par exemple ajout d'un paramètre) se traduit par la modification de la méthode correspondante au niveau du DAO et par une vérification au moment de la compilation pour le reste du projet...


    J'ai un petit post en anglais sur mon blog à ce sujet.
    Alex

  5. #5
    Membre du Club
    Inscrit en
    Janvier 2007
    Messages
    100
    Détails du profil
    Informations personnelles :
    Âge : 40

    Informations forums :
    Inscription : Janvier 2007
    Messages : 100
    Points : 57
    Points
    57
    Par défaut
    Donc si j'ai bien compris, habituellement (avec le partern DAO) on utiliserait ces classes pour faire les appels, mais maintenant avec Hibernate ce n'est plus nécessaire !? (Je demande parce que je ne suis pas sur d'avoir bien compris tes explications )

    En fait je me voulais juste savoir lequel de ces deux appels été correct ou plutot conseillé :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    assDAO = new AssDAO(session);
    assure = assDAO.get(new Long("1"));
    ou
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    assure = session.get(Ass.class, new Long("1"));

  6. #6
    Membre actif 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
    Points : 241
    Points
    241
    Par défaut
    Comme tu utilises Hibernate, je pense que la couche DAO sera toujours utile si tu décides de changer d'ORM, je te conseille donc de la garder. Toutefois:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    AssDAO assDao = DaoFactory.getAssDao();
    Avec:
    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
    19
    20
    21
    22
    23
     
    public interface AssDAO {
     
       Ass getAssById(Long id);
     
       Ass getAssByName(String name);
    }
     
    public class AssDaoHibernateImpl
          implements AssDAO {
     
       private Session session;
     
       public void setSession(Session session) {
          this.session = session;
       }
     
       Ass getAssById(Long id) {
          return session.load(Ass.class, id);
       }
     
       ...
    }
    Et ton DaoFactory s'occupe de retourné une instance de l'implémentation Hibernate des DAOs après leur avoir injecté la Session.

    Alex

  7. #7
    Membre du Club
    Inscrit en
    Janvier 2007
    Messages
    100
    Détails du profil
    Informations personnelles :
    Âge : 40

    Informations forums :
    Inscription : Janvier 2007
    Messages : 100
    Points : 57
    Points
    57
    Par défaut
    En fait je prends la suite de quelqu'un qui avait commencer à mettre en place Hibernate et je me rends compte qu'il y a quelques trucs à revoir dans l'utilisation que nous faisons d'Hibernate ...

  8. #8
    Membre actif 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
    Points : 241
    Points
    241
    Par défaut
    Tes interrogations et autres découvertes m'intéresse!
    Si les partager te dis
    Alex

  9. #9
    Membre du Club
    Inscrit en
    Janvier 2007
    Messages
    100
    Détails du profil
    Informations personnelles :
    Âge : 40

    Informations forums :
    Inscription : Janvier 2007
    Messages : 100
    Points : 57
    Points
    57
    Par défaut
    J'ai pas eu le temps de m'en occuper, quelqu'un de plus compétent s'en est chargé (donc je saurais pas expliquer comment c'est fait )

    Donc ce qu'on fait :

    • On écrit nos requetes dans les DAOs (normal jusque là il me semble)
    • On a une sorte de FabriqueDAO qui permet de récupérer les DAOs (avec une méthode getDAO(Table) on obtient une instance de TableDAO)
    • Et on appelle nos requetes avec les DAOs récupérés


    Tout ce qui concerne la gestion de la session ou de la transaction on est pas censé s'en occuper, donc je sais pas en dire plus ...

    Sinon niveau découverte et interrogations :
    Le package iface sert à rien ! Ou faut qu'on m'explique !?

  10. #10
    Membre actif 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
    Points : 241
    Points
    241
    Par défaut
    Citation Envoyé par CharlSka
    Donc ce qu'on fait :

    • On écrit nos requetes dans les DAOs (normal jusque là il me semble)
    • On a une sorte de FabriqueDAO qui permet de récupérer les DAOs (avec une méthode getDAO(Table) on obtient une instance de TableDAO)
    • Et on appelle nos requetes avec les DAOs récupérés
    lol, c'est ce que j'ai proposé!
    Mais ma question concernait plus vos intérogation que votre solution,
    Alex

  11. #11
    Membre du Club
    Inscrit en
    Janvier 2007
    Messages
    100
    Détails du profil
    Informations personnelles :
    Âge : 40

    Informations forums :
    Inscription : Janvier 2007
    Messages : 100
    Points : 57
    Points
    57
    Par défaut
    lol en effet, c'est à peu près la même chose que ce que tu avais dit ... mais nous c'est mieux !

    Ben là mon interrogation vient plus de comment on va gérer les sessions et transactions, mais là ca sort d'hibernate, et tu peux pourras pas aider bcp !

    Ensuite quand j'aurais mes réponses, je verrais si je peux en dire quelquechose dans la mesure ou j'ai compris les réponses . Et puis ca dépendra aussi beaucoup de notre Archi

    On reverra ca plus tard

  12. #12
    Membre actif 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
    Points : 241
    Points
    241
    Par défaut
    Suis pas convaincu que la factory soit mieux, mais bon...
    Et quoi, c'est genre:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    MappedTableDao dao (MappedTableDao) 
             = DaoFactory.getDao(MappedTable.class);
    ou un truc genre générifié à la

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    GenericDao<MappedClass> dao = DaoFactory.getDao(MappedTable.class);
    Alex

  13. #13
    Membre du Club
    Inscrit en
    Janvier 2007
    Messages
    100
    Détails du profil
    Informations personnelles :
    Âge : 40

    Informations forums :
    Inscription : Janvier 2007
    Messages : 100
    Points : 57
    Points
    57
    Par défaut
    Il s'agit plutot de la première solution ...
    Enfin je ne suis plus sur, on vient encore de changer ...

Discussions similaires

  1. Réponses: 10
    Dernier message: 12/12/2006, 01h44
  2. Rsync, conseils d'utilisation
    Par djibril dans le forum Debian
    Réponses: 11
    Dernier message: 02/07/2006, 15h58
  3. Conseil d'utilisation jcreator, créer un projet ?
    Par weed dans le forum Environnement de Développement Intégré (EDI)
    Réponses: 2
    Dernier message: 18/12/2005, 14h50
  4. Réponses: 3
    Dernier message: 24/12/2004, 12h21

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