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 :

Classe abstract mappée sur deux tables


Sujet :

Hibernate Java

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti Avatar de Hyperion99
    Profil pro
    Inscrit en
    Mai 2006
    Messages
    62
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Mai 2006
    Messages : 62
    Par défaut Classe abstract mappée sur deux tables
    Bonjour à tous,

    Soit la classe abstraite (cf le code à la fin) Test0
    Soit les classe Test1 et Test2 deux classes étendant la classe Test0
    Les classe Test1 et Test2 sont mappées de façon à pointer sur respectivement, les tables Table1 et Table2

    question :Est il possible de faire récuperer tous les enregistrments des tables Tes1 et Test2 en une seule requette grace à la classe Test0 ?

    D'apres ce que j'ai lu, il semblerait que cela soit tout à fait possible, malheureusement j'ai du rater une étape car j'ai l'exception suivante :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    org.hibernate.hql.ast.QuerySyntaxException: Test0 is not mapped [from Test0 test0 where test0.name=:nameEtude]
    vous trouverez les trois classes ci dessous , ainsi que la methode ou j'execute ma requette sur la base de données.

    si quelqu'un avait une réponse ou même une piste ...
    Par avance merci
    Bonne journée


    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
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
     
     
    @MappedSuperclass
    @Inheritance(strategy = InheritanceType.TABLE_PER_CLASS)
    public abstract class Test0 extends PersistantModelReplicable {
     
        static Logger log = Logger.getLogger(Test0.class);
        String name;
     
        @Column(name = "NAME")
        public String getName() {
            return name;
        }
     
        public void setName(String name) {
            this.name = name;
        }
    }
     
    ====================================================
     
    @Entity
    @Table(name = "Table1")
    public class Test1 extends Test0 {
       static Logger log = Logger.getLogger(Test1.class);
     
        public Test1(){
     
        }
     
    }
    ================================================
     
    @Entity
    @Table(name = "Table2")
    public class Test2 extends Test0 {
       static Logger log = Logger.getLogger(Test2.class);
     
        public Test2(){
     
        }
    }
    =============================================
     
    Test0 test0 = (Test0) getSession().createQuery("from Test0 test0 where test0.name=:nameEtude").setString("nameEtude","NomEtude").uniqueResult();

  2. #2
    Membre averti Avatar de Hyperion99
    Profil pro
    Inscrit en
    Mai 2006
    Messages
    62
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Mai 2006
    Messages : 62
    Par défaut
    désolé j'ai fait une erreur de frappe dans ma question :
    dans
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    uestion :Est il possible de faire récuperer tous les enregistrments des tables Tes1 et Test2 en une seule requette grace à la classe Test0 ?
    il f

  3. #3
    Membre averti Avatar de Hyperion99
    Profil pro
    Inscrit en
    Mai 2006
    Messages
    62
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Mai 2006
    Messages : 62
    Par défaut
    désolé j'ai fait une erreur de frappe dans ma question :
    dans
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Question :Est il possible de faire récuperer tous les enregistrments des tables Tes1 et Test2 en une seule requette grace à la classe Test0 ?
    il faut remplacer Test1 et Test2 par Table1 et Table2

    merci

  4. #4
    Membre confirmé
    Profil pro
    Inscrit en
    Août 2007
    Messages
    71
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France, Nord (Nord Pas de Calais)

    Informations forums :
    Inscription : Août 2007
    Messages : 71
    Par défaut
    Je ne connais pas du tout Hibernate par les annotations, mais j'ai fait exactement ce que tu veux avec du mapping par fichier HBM.

    En voici un bout si ça peut t'aider :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
    <class abstract="true" name="Produit">
         <id column="id" name="id" type="string" />
     
         <union-subclass name="Produit1" table="produit1">
              (...)
         </union-subclass>
     
         <union-subclass name="Produit2" table="produit2">
              (...)
         </union-subclass>
    </class>
    Il suffit alors de faire une requête HQL "from Produit" pour qu'Hibernate tape à la fois dans produit1 et produit2.

    Le problème est que la requête générée n'est pas très performante (surtout sur nos tables de plusieurs millions de lignes), et que nous avons finalement créé un DAO récupérant les produits type par type et retournant le tout (on gagne énormément en performances).

    Mais peut-être y a-t-il moyen d'améliorer le tout...

    MiniMarch

  5. #5
    Membre averti Avatar de Hyperion99
    Profil pro
    Inscrit en
    Mai 2006
    Messages
    62
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Mai 2006
    Messages : 62
    Par défaut
    bonjour

    Merci pour la rapidité de ta réponse...
    Je vais regarder ca ...

    Hyp.

Discussions similaires

  1. Requete sur deux tables
    Par ReaseT dans le forum ASP
    Réponses: 13
    Dernier message: 07/02/2005, 16h18
  2. Cumul sur deux tables
    Par lper dans le forum Langage SQL
    Réponses: 6
    Dernier message: 30/11/2004, 15h02
  3. Comptez sur deux tables en même temps
    Par genova dans le forum Langage SQL
    Réponses: 12
    Dernier message: 13/09/2004, 18h58
  4. trigger sur deux tables
    Par Shabata dans le forum Développement
    Réponses: 4
    Dernier message: 04/05/2004, 16h55
  5. 2 Count() sur deux tables en jointures gauches
    Par Alexandre T dans le forum Langage SQL
    Réponses: 2
    Dernier message: 03/09/2003, 16h53

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