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 :

Peut on utiliser Hibernate avec une BDD de type Myisam?


Sujet :

Hibernate Java

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Femme Profil pro
    Analyste-developpeur java
    Inscrit en
    Mai 2010
    Messages
    135
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Analyste-developpeur java
    Secteur : Conseil

    Informations forums :
    Inscription : Mai 2010
    Messages : 135
    Par défaut Peut on utiliser Hibernate avec une BDD de type Myisam?
    Bonjour!

    Ma question est dans le titre!^^
    J'aimerais donc savoir si la puissance de gestion d'Hibernate: listes, cascades... se fait au niveau applicatif (avec bcp de génération de code) ou si elle nécessite le concours d'une Base de Données plus élaborée telle que InnoDB.

    Merci!

  2. #2
    Rédacteur/Modérateur
    Avatar de Logan Mauzaize
    Homme Profil pro
    Architecte technique
    Inscrit en
    Août 2005
    Messages
    2 894
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Architecte technique
    Secteur : Transports

    Informations forums :
    Inscription : Août 2005
    Messages : 2 894
    Par défaut
    A ma connaissance Hibernate se limite à très peu de gestion logique des données. On peut supporter qu'il gère la cascade pour les relations du type One-To-Many. En générant des ordres DELETE sur suppression d'une instance de l'entité "maître".

    Cependant la cohérence des données est assurée uniquement en fin de transaction (commit) et uniquement par le SGBD. Hibernate n'a aucune connaissance des autres transactions, de la concurrence, etc.
    Java : Cours et tutoriels - FAQ - Java SE 8 API - Programmation concurrente
    Ceylon : Installation - Concepts de base - Typage - Appels et arguments

    ECM = Exemple(reproduit le problème) Complet (code compilable) Minimal (ne postez pas votre application !)
    Une solution vous convient ? N'oubliez pas le tag
    Signature par pitipoisson

  3. #3
    Membre confirmé
    Femme Profil pro
    Analyste-developpeur java
    Inscrit en
    Mai 2010
    Messages
    135
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Analyste-developpeur java
    Secteur : Conseil

    Informations forums :
    Inscription : Mai 2010
    Messages : 135
    Par défaut
    Je crois avoir compris quelque chose et j'aimerais Nemek ton avis là dessus.
    Je pense finalement que comme Hibernate dans sa gestion des objets persistants est très paramétrable et s'affranchit du type de base de données dans laquelle les données seront stockées, je pense que c'est bien Hibernate qui gère complètement les données de la base de données suivant la manière dont le code (donc au niveau applicatif a été réalisé).
    Je pense que, que la base accepte ou non les Foreign Key (InnoDB ou Myisam), Hibernate gérera la colonne qui fait le lien entre deux table (FK applicative) et suivant les options spécifiées: par exemple supprimer tous les fils lorsque le père l'a été, génèrera lui même le code sql qui fera la jointure sur la colonne FK applicative de la table fils et supprimera chaque fils l'un après l'autre.
    Et enfin, (j'ai pas mal réfléchis à la question) j'en conclu que le type de BDD n'a aucun importance pour Hibernate mais qu'une base en InnoDB garantira une sécurité réelle avec une gestion un niveau en dessous par la base de donnée garantissant l'intégrité des données.
    Ça me parait logique de cette manière...

  4. #4
    Expert éminent
    Avatar de tchize_
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2007
    Messages
    25 482
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : Belgique

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2007
    Messages : 25 482
    Par défaut
    Hibernate va gérer de manière logique vos données, de la même manière que vous les géreriez en faisant des requêtes SQL. Cependant, si vous avez comme contrainte une clé étrangère (exemple une facture dépend d'un client) et que vous effacez le client avec hibernate, hibernate n'ira pas s'amuser à faire une requête pour voir si il existe des factures dépendantes du client qui empêcheraient l'effacement. Il va juste lancer la commande DELETE. Si les foreign key ne sont pas gérées dans votre DB, ben a sera le bordel à l'arrivée.
    Hibernate nécessite que la BD respecte un minimum les règles du SQL.

  5. #5
    Rédacteur/Modérateur
    Avatar de Logan Mauzaize
    Homme Profil pro
    Architecte technique
    Inscrit en
    Août 2005
    Messages
    2 894
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Architecte technique
    Secteur : Transports

    Informations forums :
    Inscription : Août 2005
    Messages : 2 894
    Par défaut
    tchize_ a entièrement raison.
    Hibernate est là pour générer des requêtes SQL ; et faire du Lazy Loading pour les clés étrangères.
    Les différentes options que l'on peut spécifier sur les données servent pour beaucoup à la génération du code DDL s'il est demandé (mais je suis absolument contre). A la rigueur il se peut qu'il exploite certaines options pour "optimiser" son fonctionnement mais ne pourra jamais remplacé la cohérence transactionnelle que fourni (ou pas) le SGBD. D'ailleurs comment Hibernate pourait savoir ce que fait un autre processus dans la base de données ?

    J'utilise Hibernate avec une base de données MySQL, des tables InnoDB et sans contraintes (pas taper c'est pas moi qui est fait l'application) et si je supprime un élément "maître", les éléments "fils" ne sont pas supprimés. C'est l'application elle-même qui fait le ménage.

    EDIT: pour reprendre les termes de tchize_, dans cette application c'est le bordel dans la base de données avec des entité qui ne sont référencés par personne ou qui référence des entités qui n'existent plus.
    Java : Cours et tutoriels - FAQ - Java SE 8 API - Programmation concurrente
    Ceylon : Installation - Concepts de base - Typage - Appels et arguments

    ECM = Exemple(reproduit le problème) Complet (code compilable) Minimal (ne postez pas votre application !)
    Une solution vous convient ? N'oubliez pas le tag
    Signature par pitipoisson

  6. #6
    Membre confirmé
    Femme Profil pro
    Analyste-developpeur java
    Inscrit en
    Mai 2010
    Messages
    135
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Analyste-developpeur java
    Secteur : Conseil

    Informations forums :
    Inscription : Mai 2010
    Messages : 135
    Par défaut
    Oui! Tout à fait d'accord avec vous! Hibernate n'ira pas supprimer le fils si le père l'a été (dans le cas d'un DELETE du père) si l'on a pas spécifié que la liaison fils many-to-one n'est pas d'option cascade ="all-delete-orphan" et il y aura des orphelins en BDD avec des contrainte d'intégrité non respectées probablement même avec un ID résiduelle inexistant dans ID-Pere de la table du fils.
    Je pense donc aussi que rien ne peut remplacer l'usage d'une BDD de type InnoDB et de vraies clés étrangères. Mais je crois qu'un code bien fait (avec toutes options spécifiées) peut assurer une bonne cohérence des données dans la BDD avec la seule utilisation d'Hibernate.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [AC-2007] Peut-on utiliser openrecordset avec une requête ?
    Par tibofo dans le forum VBA Access
    Réponses: 4
    Dernier message: 09/11/2009, 13h35
  2. Réponses: 34
    Dernier message: 21/09/2009, 11h59
  3. Réponses: 1
    Dernier message: 10/12/2008, 19h22
  4. Dialoguer avec une BDD MySQL en language C
    Par veridik dans le forum Requêtes
    Réponses: 2
    Dernier message: 11/07/2005, 11h58
  5. Utilisation iterator avec une classe perso
    Par SteelBox dans le forum C++
    Réponses: 19
    Dernier message: 07/03/2005, 11h30

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