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 :

Quand utiliser Hibernate ? Ce que c'en coûte ?


Sujet :

Hibernate Java

  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Mars 2006
    Messages
    319
    Détails du profil
    Informations personnelles :
    Âge : 43
    Localisation : Belgique

    Informations forums :
    Inscription : Mars 2006
    Messages : 319
    Points : 351
    Points
    351
    Par défaut Quand utiliser Hibernate ? Ce que c'en coûte ?
    Salut à tous !

    J'ai enfin pris un peu de temps pour m'intéresser à Hibernate et je m'interroge. Le concept est très bon et surtout c'est un outils qui a l'air d'être reconnu et employé (j'en ignore encore la mesure).
    Afin de m'aider à cerner les choses pourriez-vous me dire dans quel(s) projet(s) utilisez vous Hibernate ? Pourquoi avez vous décidé de le mettre en place ? Est-ce un question de taille, de complexité, de sécurité ou quoi d'autre pour qu'Hibernate soit intéressant à mettre en oeuvre (en gardant à l'esprit le temps qu'il faut pour découvrir et se former) ? Connait il des limitations ? Sur quoi avez vous buté, passé trop de temps, comment auriez-vous dû vous y prendre avec plus de recul ?

    Allez, j'arrête là ma liste de question mais n'hésitez pas, si vous le voulez bien, à me parler de tout ce que vous jugez utile de savoir pour bien débuter avec Hibernate et surtout pour faire les bons choix.

    Merci !

  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 l'ai utilisé dans plusieurs projets web et dans un projet swing.
    Je le trouve très agréable à utiliser. On évite ainsi l'écriture de beaucoup
    de code SQL. Je pense que le code est plus lisible et plus facilement maintenable.
    Comme tout outil, il demande pas mal de temps d'apprentissage, mais je pense que ça en vaut la peine.

  3. #3
    Membre averti
    Profil pro
    Inscrit en
    Mars 2006
    Messages
    319
    Détails du profil
    Informations personnelles :
    Âge : 43
    Localisation : Belgique

    Informations forums :
    Inscription : Mars 2006
    Messages : 319
    Points : 351
    Points
    351
    Par défaut
    Citation Envoyé par fr1man
    Je le trouve très agréable à utiliser
    À ce sujet, j'ai eu peur d'une chose (peut être que cela vient du fait que je n'ai pas l'expérience suffisante avec Hibernate) : les requêtes SQL complexes prennent quelle tournure avec Hibernate ? N'y a-t-il pas de limitations pour des requêtes avec des jonctions, unions & co. ?

  4. #4
    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
    Il y a des limitations si tu utilises le HQL, le langage objet de requêtage d'Hibernate. Il me semble que les unions ne sont toujours pas supportées.
    Cepedant, il est possible d'utiliser dans ce cas, des requêtes en SQL pur.
    Donc au final, il n'y pas vraiment de limitation.

  5. #5
    Membre averti
    Profil pro
    Inscrit en
    Mars 2006
    Messages
    319
    Détails du profil
    Informations personnelles :
    Âge : 43
    Localisation : Belgique

    Informations forums :
    Inscription : Mars 2006
    Messages : 319
    Points : 351
    Points
    351
    Par défaut
    Tu veux dire qu'on peut exécuter une requête SQL pure et ensuite resynchroniser Hibernate avec ce qui a été modifié dans la base de données ?

  6. #6
    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
    Oui tout à fait, car tu exécutes ta requête en SQL pur via l'API hibernate.

  7. #7
    Membre averti
    Profil pro
    Inscrit en
    Mars 2006
    Messages
    319
    Détails du profil
    Informations personnelles :
    Âge : 43
    Localisation : Belgique

    Informations forums :
    Inscription : Mars 2006
    Messages : 319
    Points : 351
    Points
    351
    Par défaut
    Ok, merci. Autrement sais tu si lorsqu'on effectue une requête en // (exemple : avec un outils de gestion de base de données de type MySQL query browser) Hibernate arrive à resynchroniser les données, autrement dit à "s'apercevoir" que qqun a modifié à la main les données en base ?


    En espérant que tu aies saisi ma question... ^^'

  8. #8
    Membre expert
    Avatar de moritan
    Homme Profil pro
    Développeur Java
    Inscrit en
    Juin 2005
    Messages
    687
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France, Manche (Basse Normandie)

    Informations professionnelles :
    Activité : Développeur Java

    Informations forums :
    Inscription : Juin 2005
    Messages : 687
    Points : 3 135
    Points
    3 135
    Par défaut
    Normalement oui c'est possible. Après je ne suis pas sur que ce soit vrai dans tous les cas.

  9. #9
    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
    Oui c'est possible mais ça dépend de la façon dont tu as développé ton application.
    Hibernate utilises deux caches :
    - le cache de session
    - le cache de niveau 2
    Les caches n'ont pas moyen de savoir qu'une application extérieure a modifié la base de données.
    Si tu te passes du cache de niveau 2 et tu utilises des sessions courtes, tu n'auras pas de soucis.
    Sinon je ne vois pas.

  10. #10
    Membre averti
    Profil pro
    Inscrit en
    Mars 2006
    Messages
    319
    Détails du profil
    Informations personnelles :
    Âge : 43
    Localisation : Belgique

    Informations forums :
    Inscription : Mars 2006
    Messages : 319
    Points : 351
    Points
    351
    Par défaut
    Hum, il faudra que je m'informe sur ce que sont ces 2 caches.
    Ce que tu appelles "session courte" c'est le motif "une session par transaction" ? Dans ce cas l'utilisation d'Hibernate ne fait elle pas un peu "gadget" dans la mesure où il ne sert plus qu'à remplir les contrats de méthodes save / load (qui seraient aussi rapides à coder que d'écrire des mapping & co.), sans compter l'impact sur les performances lié à l'emploi de l'outils ?
    (Loin de moi l'idée de vexer quiconque par cette question hein ^^')

  11. #11
    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
    Disons, qu'après, tu as toute la gestion des associations qui est grandement simplifiée.

    L'impact sur les performances est difficile à évaluer. Je ne pense pas qu'Hibernate pose de problèmes s'il est bien configuré.

  12. #12
    Membre averti
    Profil pro
    Inscrit en
    Mars 2006
    Messages
    319
    Détails du profil
    Informations personnelles :
    Âge : 43
    Localisation : Belgique

    Informations forums :
    Inscription : Mars 2006
    Messages : 319
    Points : 351
    Points
    351
    Par défaut
    Ok, merci pour tes réponses.

    Si tu n'es pas encore tané de me répondre j'ai une autre question qui me vient... ^^ (la question s'adresse à tout le monde souhaitant y répondre bien entendu).

    En parlant d'association est il possible de demander à Hibernate de sauvegarder / charger des objets paritiellement. Par exemple si j'ai un objet de type Contact associé avec une instance de Coordinates, est il possible de dire : "Ok, j'ai modifié le nom du contact, sauvegarde moi juste le contact et ne touche pas aux coordonnées". C'est la notion de "cascade" qui intervient dans mon interrogation : jusqu'où peut on (et comment) propager une action de sauvegarde / chargement lorsque les associations se complexifient ?
    J'imagine qu'Hibernate détecte correctement les changements sur les objets persistants alors peut être que tout ceci n'a pas lieu d'être mis en question en fin de compte... Ceci dit j'aime autant poser la question, des fois que j'aurais mal compris ou manqué qqchose.

    Merci encore !

  13. #13
    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
    Tu peux paramétrer les "cascades" comme tu le veux.

    Et de base, si tu modifies juste une propriété d'un objet, il ne va pas aller faire des update de toutes les associations pour rien.

    D'une manière générale, Hibernate est très paramétrable.
    Il suffit juste de trouver où le paramétrer.

  14. #14
    BsT
    BsT est déconnecté
    Membre régulier
    Profil pro
    Inscrit en
    Juillet 2004
    Messages
    72
    Détails du profil
    Informations personnelles :
    Localisation : France, Hauts de Seine (Île de France)

    Informations forums :
    Inscription : Juillet 2004
    Messages : 72
    Points : 83
    Points
    83
    Par défaut
    Pour sauvegarder uniquement les valeurs qui ont changé c'est l'option dynamic-update dans le mapping de ta classe.

    Hibernate détecte parfaitement le changement dans les objets persistants (ie : rattaché à la session) c'est le dirty-checking (Flush mode)

    Enfin tu as des options d'enregistrements/effacement en cascade pour ton arborescense d'objets.

    Bref tu vas trouver ton bonheur et gagner un maximun de temps en développement.

    Ps : J'utilise encore Hibernate 2

    Edit : Ca fait 2 fois que tu vas plus vite que moi Fr1man

  15. #15
    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
    Désolé
    Tes réponses sont intéressantes et complémentaires donc c'est pas grave.

  16. #16
    BsT
    BsT est déconnecté
    Membre régulier
    Profil pro
    Inscrit en
    Juillet 2004
    Messages
    72
    Détails du profil
    Informations personnelles :
    Localisation : France, Hauts de Seine (Île de France)

    Informations forums :
    Inscription : Juillet 2004
    Messages : 72
    Points : 83
    Points
    83
    Par défaut
    J'essayerais de faire une réponse plus complète aux questions de TigRoO° ce soir.

    (Un retour d'expérience de 2 1/2 ans d'Hibernate sur un projet J2EE.)

  17. #17
    Membre averti
    Profil pro
    Inscrit en
    Mars 2006
    Messages
    319
    Détails du profil
    Informations personnelles :
    Âge : 43
    Localisation : Belgique

    Informations forums :
    Inscription : Mars 2006
    Messages : 319
    Points : 351
    Points
    351
    Par défaut
    Héhé, vous battez pas ! ^^'

    En tout cas merci à vous deux pour vos réponses, ça m'éclaire un peu plus.

    Comme vous avez l'air motivés et disponibles j'ai envie d'abuser () : connaissez vous JPOX ou d'autres solitions équivalentes (?) à Hibernate ? Les acez vous testé ? Qu'en ressort il ? Vous voyez l'avenir de tout ça comment ?

    Citation Envoyé par BsT
    J'essayerais de faire une réponse plus complète aux questions de TigRoO° ce soir.

    (Un retour d'expérience de 2 1/2 ans d'Hibernate sur un projet J2EE.)
    Super, j'ai hâte ! Merci infiniment ! )

Discussions similaires

  1. Réponses: 9
    Dernier message: 06/01/2011, 17h53
  2. generer les fischier hbm.xml en utilisant hibernate
    Par lahiane dans le forum Eclipse Java
    Réponses: 1
    Dernier message: 28/02/2006, 13h20
  3. Réponses: 10
    Dernier message: 08/02/2005, 10h52
  4. Écriture dans un DBgrid quand utilise un query comme dataset
    Par dcayou dans le forum Bases de données
    Réponses: 3
    Dernier message: 13/07/2004, 22h22
  5. [Procédure Stocké] Quand utiliser ?
    Par touhami dans le forum Bases de données
    Réponses: 2
    Dernier message: 18/03/2004, 09h09

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