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 :

accéder à des tables non mappées?


Sujet :

Hibernate Java

  1. #1
    Membre émérite
    Avatar de gerald2545
    Profil pro
    Inscrit en
    Février 2003
    Messages
    744
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2003
    Messages : 744
    Par défaut accéder à des tables non mappées?
    Bonjour,
    nous sommes en cours de mise en place d'une appli RCP basée sur hibernate qui attaque une base de données postgresql. Cette base me permet entre autres de stocker des informations sur l'utilisation d'appareils de laboratoire.
    J'ai une table par appareil. Toutes ces tables contiennent strictement les mêmes colonnes. Seuls le nom de la table et de la séquence diffèrent (nom de la table pour l'appareil XXX = runXXX et sequence = runXXX_seq).

    Pour l'utilisation d'hibernate de "base", c'est OK(CRUD sur des tables mappées) ...mais il y a un point qui me pose problème : tous les ans, nous avons 2 à 3 appareils qui sont rajoutés à notre parc, et j'aimerais éviter d'avoir à créer de nouvelles classes et fichiers de mapping, compiler et réinstaller cette appli pour chaque nouvelle machine.

    Le nom des appareils est listé dans une table de la base de données.
    Si dans cette table j'ai le nom YYY, alors je sais qu'il existe une table runYYY dans ma base de données.
    Demain, j'installe l'appareil ZZZ, je crée automatiquement la table runZZZ.

    y-a-t'il moyen avec hibernate d'accéder à ces tables sans les avoir forcément déclarées dans mon appli?

    Merci d'avance pour vos pistes
    G

  2. #2
    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 n'est pas toujours adapté pour mapper des structure existante quand elle ne sont pas repectueuses d'un minimum de standard. Cela pose-t-il un grand problème de réunir toutes ces tables en une seule? Avec une colonne discriminante. Le problème d'hibernate dans ton cas c'est qu'il lie fortement un classe à une table. Tu peux éventuellement utiliser une view postgres : http://www.postgresql.org/docs/8.2/i...reateview.html pour créer une table virtuelle affichant tous les appareils dans une seule table. Et jouer avec de rule postgresql pour gerer les insert. A vérifier.

    Je ne vois pas trop comment dans hibernate lui dire de mapper N tables identiques sur un seul POJO. Ce serait problématique pour le fonctionnement des méthodes du genre Session.load(id,class), sur quelle table faire le load?

  3. #3
    Membre éprouvé
    Profil pro
    Inscrit en
    Mars 2004
    Messages
    104
    Détails du profil
    Informations personnelles :
    Âge : 48
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations forums :
    Inscription : Mars 2004
    Messages : 104
    Par défaut
    Salut,

    est ce que tes appareils ont un comportement différent ? as tu une classe pour chacun d'eux et fais tu des opérations différentes pour chacun ? As tu besoin de les différencier ?
    Si oui, quand tu ajoutes un appareil, tu devras avoir la classe correspondante dans ton appli pour le prendre en charge.
    Sinon pourquoi faire des classes différentes ?

  4. #4
    Membre émérite
    Avatar de gerald2545
    Profil pro
    Inscrit en
    Février 2003
    Messages
    744
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2003
    Messages : 744
    Par défaut
    merci pour vos réponses,
    c'est vrai qu'il y a un problème de conception, j'aurais dû faire de l'héritage postresql, mais je n'étais pas à l'aise avec sa mise en oeuvre et ne voyait pas bien comment obtenir ce que je voulais

    Tous les appareils ont en effet un comportement identique. J'avais créé autant de table que d'appareils à l'époque pour me simplifier la vie : dans 1 table toutes les données d'un appareil, avec 1 numéro de run spécifique pour chaque nouvelle utilisation de l'appareil.
    La machine A peut avoir les numéros de runs 1 à 10
    La machine B peut avoir les numéros de runs 1à 42
    etc

    je vais essayer de voir du côté des vues pour "rattraper" ce problème, merci pour la liste

  5. #5
    Membre émérite
    Avatar de gerald2545
    Profil pro
    Inscrit en
    Février 2003
    Messages
    744
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2003
    Messages : 744
    Par défaut
    en y pensant un peu, la vue postgreql ne va pas solutionner mon problème. Si c'est pour de la visualisation, pas de souci. Mais je veux aussi pouvoir mettre à jour mes tables d'appareils.
    .....je vais sans doute être obligé de faire des trucs pas très propre.

    Créer une classe Appareil
    Créer un DAO qui contiendra les méthodes classiques (au moins le findById et le merge) revisitées avec des requêtes HQL qui prendront en paramètre le nom de l'appareil....

  6. #6
    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
    Citation Envoyé par gerald2545 Voir le message
    en y pensant un peu, la vue postgreql ne va pas solutionner mon problème. Si c'est pour de la visualisation, pas de souci. Mais je veux aussi pouvoir mettre à jour mes tables d'appareils.
    .....je vais sans doute être obligé de faire des trucs pas très propre.
    Tu peux peut etre simplement, si c'est possible, completement changer ton shéma. Déplacer tes N tables appareilxyz vers un grosse tables appareils avec une colonne "modèle" et faire ton DAO qui n'utilise plus qu'une seul classe. Tu peux même si tu veux temporairement, garder une classe par appareil en utilisant le mapping hibernate avec criter discriminant (voir la doc hibernate -> héritage -> une seule table par hierarchie de classe)

    Sinon, les vue postgres sont éditables d'après la doc que j'ai vue, mais pas par défaut, tu doit implémenter en postgres des petit scrip sql qui transforment un insert / update / delete de la vue en un insert/update/delete sur les tables réelles, mais ca devrais pas être bien compliqué je pense :p

  7. #7
    Membre émérite
    Avatar de gerald2545
    Profil pro
    Inscrit en
    Février 2003
    Messages
    744
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2003
    Messages : 744
    Par défaut
    Citation Envoyé par tchize_ Voir le message
    Tu peux peut etre simplement, si c'est possible, completement changer ton shéma. Déplacer tes N tables appareilxyz vers un grosse tables appareils avec une colonne "modèle" et faire ton DAO qui n'utilise plus qu'une seul classe. Tu peux même si tu veux temporairement, garder une classe par appareil en utilisant le mapping hibernate avec criter discriminant (voir la doc hibernate -> héritage -> une seule table par hierarchie de classe)
    ça ne va pas être possible....trop d'appli à modifieer pour mes petites mains...
    Citation Envoyé par tchize_ Voir le message
    Sinon, les vue postgres sont éditables d'après la doc que j'ai vue, mais pas par défaut, tu doit implémenter en postgres des petit scrip sql qui transforment un insert / update / delete de la vue en un insert/update/delete sur les tables réelles, mais ca devrais pas être bien compliqué je pense :p
    ça par contre ça m'intéresse grave !!!

    je vous tiens au courant

    A+

    Gérald

Discussions similaires

  1. Contrôle des tables non utilisées
    Par Korben-Dallas dans le forum Administration
    Réponses: 14
    Dernier message: 07/07/2011, 10h40
  2. [AC-2007] Accéder à des tables pour extraction de données
    Par leriderfoudu77 dans le forum Access
    Réponses: 2
    Dernier message: 30/09/2009, 09h58
  3. Interroger des tables non liées
    Par jeanphi31 dans le forum Langage SQL
    Réponses: 3
    Dernier message: 24/02/2009, 08h55
  4. requete sur des tables non liées
    Par matesp dans le forum Access
    Réponses: 3
    Dernier message: 03/05/2006, 17h01
  5. Impossible d'accéder aux tables non créées par dbo
    Par Pete dans le forum MS SQL Server
    Réponses: 4
    Dernier message: 07/10/2005, 14h01

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