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 :

Récupération d'une liste --> utilisateur is not mapped [select nom from utilisateur


Sujet :

Hibernate Java

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Novembre 2006
    Messages
    43
    Détails du profil
    Informations personnelles :
    Localisation : France, Vienne (Poitou Charente)

    Informations forums :
    Inscription : Novembre 2006
    Messages : 43
    Par défaut Récupération d'une liste --> utilisateur is not mapped [select nom from utilisateur
    Bonjour,
    Je débute totalement ... Ne criez pas trp fort svp... ;-)

    Voila je cherche à récupérer une liste des noms des utilisateurs de ma BDD (mysql).

    Le code utilisé à l'intérieur de mon Main est le suivant :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    Session session = HibernateUtil.currentSession();
    List list = session.createQuery("select nom from utilisateur where nom= ?").setString(0, "nom").list();
    Iterator it = list.iterator();
    while(it.hasNext()) {
    Utilisateur unUtilisateur = (Utilisateur)it.next();
    System.out.println(unUtilisateur.getNom()); }
    HibernateUtil.closeSession();

    Au lancement, problème !

    Exception in thread "main" org.hibernate.hql.ast.QuerySyntaxException: utilisateur is not mapped [select nom from utilisateur where nom= ?]
    at org.hibernate.hql.ast.util.SessionFactoryHelper.requireClassPersister(SessionFactoryHelper.java:158)
    at org.hibernate.hql.ast.tree.FromElementFactory.addFromElement(FromElementFactory.java:87)
    at org.hibernate.hql.ast.tree.FromClause.addFromElement(FromClause.java:70)
    at org.hibernate.hql.ast.HqlSqlWalker.createFromElement(HqlSqlWalker.java:257)
    at org.hibernate.hql.antlr.HqlSqlBaseWalker.fromElement(HqlSqlBaseWalker.java:3056)
    at org.hibernate.hql.antlr.HqlSqlBaseWalker.fromElementList(HqlSqlBaseWalker.java:2945)
    at org.hibernate.hql.antlr.HqlSqlBaseWalker.fromClause(HqlSqlBaseWalker.java:688)
    at org.hibernate.hql.antlr.HqlSqlBaseWalker.query(HqlSqlBaseWalker.java:544)
    at org.hibernate.hql.antlr.HqlSqlBaseWalker.selectStatement(HqlSqlBaseWalker.java:281)
    at org.hibernate.hql.antlr.HqlSqlBaseWalker.statement(HqlSqlBaseWalker.java:229)
    at org.hibernate.hql.ast.QueryTranslatorImpl.analyze(QueryTranslatorImpl.java:228)
    at org.hibernate.hql.ast.QueryTranslatorImpl.doCompile(QueryTranslatorImpl.java:160)
    at org.hibernate.hql.ast.QueryTranslatorImpl.compile(QueryTranslatorImpl.java:111)
    at org.hibernate.engine.query.HQLQueryPlan.<init>(HQLQueryPlan.java:77)
    at org.hibernate.engine.query.HQLQueryPlan.<init>(HQLQueryPlan.java:56)
    at org.hibernate.engine.query.QueryPlanCache.getHQLQueryPlan(QueryPlanCache.java:72)
    at org.hibernate.impl.AbstractSessionImpl.getHQLQueryPlan(AbstractSessionImpl.java:133)
    at org.hibernate.impl.AbstractSessionImpl.createQuery(AbstractSessionImpl.java:112)
    at org.hibernate.impl.SessionImpl.createQuery(SessionImpl.java:1623)
    at applicatifLFD.Test.main(Test.java:44)
    Pour information, mon fichier Utilisateur.hbm.xml est :

    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
    <?xml version="1.0"?>
    <!DOCTYPE hibernate-mapping PUBLIC
    	"-//Hibernate/Hibernate Mapping DTD//EN"
    	"http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd" >
     
    <hibernate-mapping package="donnees">
    	<class name="Utilisateur" table="utilisateur">
    		<meta attribute="sync-DAO">false</meta>
    		<id name="Id" type="integer" column="id"><generator class="increment"/></id>
    		<!--<property name="IdProfil" column="id_profil" type="integer" not-null="true" length="11"/>-->
    		<property name="Nom" column="nom" type="string" not-null="true" length="32"/>
    		<property name="Prenom" column="prenom" type="string" not-null="true" length="32"/>
    		<property name="Login" column="login" type="string" not-null="true" length="8"/>
    		<property name="Mdp" column="mdp" type="string" not-null="true" length="8"/>
    	</class>	
    </hibernate-mapping>
    et hibernate.cfg.xml :

    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
    <?xml version="1.0" encoding="UTF-8"?>
    <!DOCTYPE hibernate-configuration PUBLIC
    		"-//Hibernate/Hibernate Configuration DTD 3.0//EN"
    		"http://hibernate.sourceforge.net/hibernate-configuration-3.0.dtd">
    <hibernate-configuration>
    	<session-factory>
    		<property name="hibernate.connection.driver_class">com.mysql.jdbc.Driver</property>
    		<property name="hibernate.connection.password">master</property>
    		<property name="hibernate.connection.url">jdbc:mysql://localhost:3306/LFD</property>
    		<property name="hibernate.connection.username">master</property>
    		<property name="hibernate.dialect">org.hibernate.dialect.MySQLDialect</property>
    		<property name="transaction.factory_class">org.hibernate.transaction.JDBCTransactionFactory</property>
    		<property name="current_session_context_class">thread</property>
    		<property name="hibernate.show_sql">true</property>
    		<mapping resource="Utilisateur.hbm.xml" />
    		<mapping resource="Role.hbm.xml" />
    	</session-factory>
    </hibernate-configuration>
    Je n'arrive pas à cerner le problème....

    Merci d'avance!

  2. #2
    Membre Expert
    Profil pro
    Inscrit en
    Août 2006
    Messages
    3 276
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2006
    Messages : 3 276
    Par défaut
    Il faut utiliser le nom de ta classe dans ta requete et non pas le nom de ta table.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    select nom from Utilisateur where nom= ?

  3. #3
    Membre averti
    Profil pro
    Inscrit en
    Novembre 2006
    Messages
    43
    Détails du profil
    Informations personnelles :
    Localisation : France, Vienne (Poitou Charente)

    Informations forums :
    Inscription : Novembre 2006
    Messages : 43
    Par défaut
    Encore un bon point pour fr1man !! :-)

    Dorénavant, en lieu et place des messages d'erreurs précédents (la console donc ...) :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Hibernate: select utilisateu0_.nom as col_0_0_ from utilisateur utilisateu0_ where utilisateu0_.nom=?
    J'ai essayé différentes choses, notamment de mettre, ou pas, le nom de variable 'nom' en majuscule à différents endroits (dans la requête, en paramètre du setString)...

    Pour l'instant, choux blanc!

  4. #4
    Membre Expert
    Profil pro
    Inscrit en
    Août 2006
    Messages
    3 276
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2006
    Messages : 3 276
    Par défaut
    Ca semble correct.
    C'est normal que tu ne vois pas la valeur du paramêtre apparaitre dans la console.
    Queston bête :
    Es tu sur que ta base contient bien des données ?

  5. #5
    Invité
    Invité(e)
    Par défaut
    Je dis peut être une bêtise mais avec la requête ainsi :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    List list = session.createQuery("select nom from Utilisateur where nom= ?").setString(0, "nom").list();
    alors Hibernate ne va récupérer que la colonne "nom".
    Ne faudrait-il pas faire :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    List list = session.createQuery("from Utilisateur where nom= ?").setString(0, "nom").list();
    Pour ensuite avoir une liste d'objet "Utilisateur" et pouvoir alors appeler :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Utilisateur unUtilisateur = (Utilisateur)it.next();

  6. #6
    Membre averti
    Profil pro
    Inscrit en
    Novembre 2006
    Messages
    43
    Détails du profil
    Informations personnelles :
    Localisation : France, Vienne (Poitou Charente)

    Informations forums :
    Inscription : Novembre 2006
    Messages : 43
    Par défaut
    Le problème reste le même :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    Hibernate: select utilisateu0_.id as id0_, utilisateu0_.nom as nom0_, utilisateu0_.prenom as prenom0_, utilisateu0_.login as login0_, utilisateu0_.mdp as mdp0_ from utilisateur utilisateu0_ where utilisateu0_.nom=?
    Toujours pas d'idée....

  7. #7
    Membre éclairé
    Profil pro
    Architecte de système d’information
    Inscrit en
    Janvier 2007
    Messages
    439
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Architecte de système d’information

    Informations forums :
    Inscription : Janvier 2007
    Messages : 439
    Par défaut Commande is not mapped
    Bonjour , débutant en hibernate , j'ai du mal à débugguer un problème.

    Voici la classe test qui génére l'erreur (qui est d'ailleurs présente dès que je touche à la table ou l'objet Commande).

    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
     
    public class TestCommandeLister { 
     
      public static void main(String args[]) throws Exception { 
        Configuration config = new Configuration(); 
        config.addClass(Article.class); 
        SessionFactory sessionFactory = config.buildSessionFactory(); 
        Session session = sessionFactory.openSession(); 
     
        try { 
          Query query = session.createQuery("from Commande"); 
          List commandes = query.list();
          for (int i = 0; i < commandes.size(); i++) { 
        	  Commande commande = (Commande) commandes.get(i); 
            System.out.println("nom = " + commande.getReference()); 
          } 
        } finally { 
          session.close(); 
        } 
        sessionFactory.close(); 
      }
    L'erreur généré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
    Exception in thread "main" org.hibernate.hql.ast.QuerySyntaxException: Commande is not mapped [from Commande]
    	at org.hibernate.hql.ast.util.SessionFactoryHelper.requireClassPersister(SessionFactoryHelper.java:158)
    	at org.hibernate.hql.ast.tree.FromElementFactory.addFromElement(FromElementFactory.java:87)
    	at org.hibernate.hql.ast.tree.FromClause.addFromElement(FromClause.java:70)
    	at org.hibernate.hql.ast.HqlSqlWalker.createFromElement(HqlSqlWalker.java:255)
    	at org.hibernate.hql.antlr.HqlSqlBaseWalker.fromElement(HqlSqlBaseWalker.java:3056)
    	at org.hibernate.hql.antlr.HqlSqlBaseWalker.fromElementList(HqlSqlBaseWalker.java:2945)
    	at org.hibernate.hql.antlr.HqlSqlBaseWalker.fromClause(HqlSqlBaseWalker.java:688)
    	at org.hibernate.hql.antlr.HqlSqlBaseWalker.query(HqlSqlBaseWalker.java:544)
    	at org.hibernate.hql.antlr.HqlSqlBaseWalker.selectStatement(HqlSqlBaseWalker.java:281)
    	at org.hibernate.hql.antlr.HqlSqlBaseWalker.statement(HqlSqlBaseWalker.java:229)
    	at org.hibernate.hql.ast.QueryTranslatorImpl.analyze(QueryTranslatorImpl.java:228)
    	at org.hibernate.hql.ast.QueryTranslatorImpl.doCompile(QueryTranslatorImpl.java:160)
    	at org.hibernate.hql.ast.QueryTranslatorImpl.compile(QueryTranslatorImpl.java:111)
    	at org.hibernate.engine.query.HQLQueryPlan.<init>(HQLQueryPlan.java:77)
    	at org.hibernate.engine.query.HQLQueryPlan.<init>(HQLQueryPlan.java:56)
    	at org.hibernate.engine.query.QueryPlanCache.getHQLQueryPlan(QueryPlanCache.java:72)
    	at org.hibernate.impl.AbstractSessionImpl.getHQLQueryPlan(AbstractSessionImpl.java:133)
    	at org.hibernate.impl.AbstractSessionImpl.createQuery(AbstractSessionImpl.java:112)
    	at org.hibernate.impl.SessionImpl.createQuery(SessionImpl.java:1623)
    	at test.TestCommandeLister.main(TestCommandeLister.java:22)
    Mon fichier Mapping
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    <?xml version="1.0"?>
    <!DOCTYPE hibernate-mapping
        PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN"
        "http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">
     
    <hibernate-mapping>
    	<class name="mywebapp.persistance.data.Commande" table="commande">
    		<id name="reference" type="string"><generator class="assigned" /></id>
    			<property name="quantite" type="int" not-null="true" />
    	</class>
    </hibernate-mapping>
    Mon fichier de configuration hibernate contient
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    	<mapping resource="mywebapp/persistance/data/Commande.hbm.xml" />
    Ma classe Commande :
    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
    package mywebapp.persistance.data;
     
    public class Commande {
     
    	private Integer quantite;
    	private String reference;
     
    	public Commande(){}
     
    	public Commande(String r, Integer i) {
    		this.reference = r;
    		this.quantite = i;
    	}
     
     
    	public Integer getQuantite() {
    		return quantite;
    	}
     
    	public void setQuantite(Integer quantite) {
    		this.quantite = quantite;
    	}
     
    	public String getReference() {
    		return reference;
    	}
     
    	public void setReference(String reference) {
    		this.reference = reference;
    	};
     
    }
    Et le schéma de ma base
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
     
    CREATE TABLE `commande` (
      `quantite` int(3) default NULL,
      `reference` varchar(15) NOT NULL default '',
      PRIMARY KEY  (`reference`)
    ) ENGINE=MyISAM DEFAULT CHARSET=latin1;
    Voilà si vous avez des idées pour débugguer , ça serait sympa.

  8. #8
    Membre habitué
    Profil pro
    Inscrit en
    Juin 2007
    Messages
    12
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Juin 2007
    Messages : 12
    Par défaut Objets
    Pour ceux qui n'aurait pas tout suivi dans une requête SQL hibernate il faut utiliser les Class (les "objets") et non les tables en base de donnée.

    une table : "utilisateurs" avec "nom", "prenom", "adresse" (qui référence une adresse dans une table "adresses")
    revient en objet à :
    public class Utilisateur
    private String nom
    private String prenom
    private Adresse adresse.

    (note : pas de majuscule en début d'identifiant, seulement pour les class !!! C'est une règle en programmation !)
    Après dans une requête on peut donc récupérer tous les utilisateurs habitant la rue du paradis :
    "from Utilisateurs u where u.adresse.rue = ?"

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

Discussions similaires

  1. Réponses: 1
    Dernier message: 05/03/2007, 20h51
  2. Récupération d'une liste chaînée
    Par L'ancien dans le forum Langage
    Réponses: 3
    Dernier message: 04/02/2007, 01h16
  3. Récupération d'une liste déroulante
    Par artotal dans le forum Langage
    Réponses: 1
    Dernier message: 28/10/2006, 23h29
  4. Récupération d'une liste de structures Oracle via Java
    Par MagikMarcel dans le forum Langage
    Réponses: 2
    Dernier message: 29/06/2006, 16h34
  5. Réponses: 6
    Dernier message: 16/05/2006, 16h17

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