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 :

Configuration Hibernate Multiple Database


Sujet :

Hibernate Java

  1. #1
    Membre à l'essai
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Avril 2003
    Messages
    13
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Avril 2003
    Messages : 13
    Points : 10
    Points
    10
    Par défaut Configuration Hibernate Multiple Database
    Bonjour,

    Je viens vers vous car j'ai vu plein de choses différentes sur le net pour pouvoir utiliser plusieurs Database avec Hibernate.
    Voici ce que j'ai :
    • 1 base avec les données clientes (Utilisateur, Profil, ...) = Utilisateur
    • 1 base avec des données communes à tous les clients = Params
    • 1 base par clients = Client


    Sachant que je connais le nom de la base Utilisateur et Params.
    Je me dis que je peut utiliser deux sessionFactory qui sont paramétrés dans le hibernate.cfg.xml et que je vais utiliser un @qualifier pour indiquer à mes Dao quel SessionFactory il devra utiliser.
    Mais le nom de la base Client est défini dans les données Utilisateur. Ici je ne peux pas avoir un 3ème SessionFactory paramétrer dans le fichier xml.

    Donc comment paramétrer Hibernate et mes Dao pour que je puisse récupérer les données Clients?
    Sachant que je souhaite utiliser les annotations au maximum pour ne pas avoir à paramétrer toutes les Dao dans le fichier xml.

    Enfin je souhaiterais aussi avoir des Dao Génériques pour ne pas avoir à écrire X fois le même code pour toutes les Dao concernant les requêtes basiques (Create, Update, Replace, List, Delete, ...). Mais cela peut venir après je pense lorsque cela marche bien.
    Ke la force soit avec vous

  2. #2
    Membre chevronné
    Profil pro
    Inscrit en
    Octobre 2005
    Messages
    940
    Détails du profil
    Informations personnelles :
    Âge : 44
    Localisation : France

    Informations forums :
    Inscription : Octobre 2005
    Messages : 940
    Points : 1 817
    Points
    1 817
    Par défaut
    Bonjour,

    Ce document détaille la création de configuration de façon programmatique plutôt que par fichier :
    http://docs.jboss.org/hibernate/orm/...n-programmatic

    Pour ce qui est de créer des DAO génériques, Google permet d'un trouver un ici:
    http://desgeeksetdeslettres.com/prog...-dao-generique
    Méfiez vous tout de même des DAO génériques, il suffit parfois d'une petite évolution pour devoir réécrire des dizaines de classes. Vous pourriez créer un DAO générique comme classe abstraite, puis créer les autres DAO en héritant du DAO générique. Ceci vous permettra d'écrire le DAO d'une classe en une ligne tout en gardant la possibilité de modifier le DAO d'une seule classe.

  3. #3
    Membre à l'essai
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Avril 2003
    Messages
    13
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Avril 2003
    Messages : 13
    Points : 10
    Points
    10
    Par défaut
    Merci pour ces informations,

    Si j'ai bien compris :
    Il faut créer un objet Configuration auquel on passe les ressources (XML) ou les Entités qui contiennent les informations des tables de la base Client.

    Je trouve cela pas très pratique alors qu'on peut utiliser des annotations pour récupérer ces informations. Et puis il ne faut pas oublier de faire une mise à jour de la configuration quand on ajoute une table.
    Sinon c'est moi qui ait compris de travers.

    A partir de là, on crée sa SessionFactory avec les propriétés voulues.

    Pour le deuxième point, sur les Dao Génériques, je ne comptais pas prendre un truc tout fait qui risque d'avoir des évolutions qui peuvent comme tu le dis faire réécrire beaucoup de ligne. Mais bien me faire une Interface contenant les méthodes basiques qui sont implémentées dans une classe.
    Et à partir de ces deux classes, je vais créer mes Dao avec un extends et implements.

    En fait ma question est plutôt comment paramétrer un voir plusieurs SessionFactory pour utiliser une base dont on connait le nom et un autre SessionFactory pour utiliser une base dont le nom est connu uniquement lors de la récupération des informations de l'utilisateur?
    Et comment appliquer un SessionFactory à certaines Dao?
    Tout cela en utilisant un AnnotationSessionFactoryBean pour pouvoir faire un packageToScan qui va récupérer mes informations de tables.
    Ke la force soit avec vous

  4. #4
    Membre chevronné
    Profil pro
    Inscrit en
    Octobre 2005
    Messages
    940
    Détails du profil
    Informations personnelles :
    Âge : 44
    Localisation : France

    Informations forums :
    Inscription : Octobre 2005
    Messages : 940
    Points : 1 817
    Points
    1 817
    Par défaut
    Citation Envoyé par shouwy Voir le message
    Si j'ai bien compris :
    Il faut créer un objet Configuration auquel on passe les ressources (XML) ou les Entités qui contiennent les informations des tables de la base Client.
    Justement non, le lien montre comment créer une configuration sans une ligne de XML :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    Configuration cfg = new Configuration()
        .addClass(org.hibernate.auction.Item.class)
        .addClass(org.hibernate.auction.Bid.class)
        .setProperty("hibernate.dialect", "org.hibernate.dialect.MySQLInnoDBDialect")
        .setProperty("hibernate.connection.datasource", "java:comp/env/jdbc/test")
        .setProperty("hibernate.order_updates", "true");
    Il suffit de mettre l'adresse de la base client en datasource, vos classes, etc.

    Ensuite vous faites :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    SessionFactory sessions = cfg.buildSessionFactory();
    et voilà votre session factory.

    Vous allez devoir créer un SessionFactory pour chaque base client. Pour le passage du SessionFactory aux DAO, je vois deux solutions :
    1. Chaque DAO est global à l'application. Vous lui passez le paramètre sessionFactory à chaque appel de méthode (create, update etc.).
    2. Vous créez un jeu de DAO par connexion client. Le DAO reçoit le sessionFactory du client en constructeur.

  5. #5
    Membre à l'essai
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Avril 2003
    Messages
    13
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Avril 2003
    Messages : 13
    Points : 10
    Points
    10
    Par défaut
    Je pense que vous n'avez pas lu ma phrase jusqu'au bout. On a deux moyens de renseigner les mapping via des fichiers XML ou des Class.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    Configuration cfg = new Configuration()
        .addResource("Item.hbm.xml")
        .addResource("Bid.hbm.xml");
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    Configuration cfg = new Configuration()
        .addClass(org.hibernate.auction.Item.class)
        .addClass(org.hibernate.auction.Bid.class);
    A partir de là, on ajoute les propriétés qui sont propres à la connexion. Mais il y a des propriétés qui sont plutôt liés au paramétrage serveur comme le dbUser, le password, l'url de la DB ...
    Ces informations seraient mieux dans un fichier xml.
    Ke la force soit avec vous

Discussions similaires

  1. configuration Hibernate et SQL server Express 2005
    Par K-Kaï dans le forum Hibernate
    Réponses: 9
    Dernier message: 28/03/2008, 18h58
  2. [Hibernate] erreur database product name cannot be null
    Par enimiste dans le forum Hibernate
    Réponses: 4
    Dernier message: 24/04/2007, 19h07
  3. [debutant] configurer hibernate sous myeclipse
    Par solawe dans le forum Hibernate
    Réponses: 3
    Dernier message: 22/11/2006, 10h36
  4. problem parsing configuration/hibernate.cfg.xml
    Par allstar dans le forum Hibernate
    Réponses: 2
    Dernier message: 25/08/2006, 07h23
  5. Configurer Hibernate pour Oracle
    Par turie dans le forum Hibernate
    Réponses: 1
    Dernier message: 29/05/2006, 15h08

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