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 :

Requetage impossible avec createQuery


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
    Mai 2005
    Messages
    45
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2005
    Messages : 45
    Par défaut Requetage impossible avec createQuery
    Bonjour,

    Lorsque je fais :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    List lRequete = session.createQuery("select ID from ALERTES_TEMP").list();
    j'ai une exception qui est lancé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
    Nested Exception is org.hibernate.hql.ast.QuerySyntaxException: ALERTES_TEMP is not mapped [select ID from ALERTES_TEMP]
    	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)
    Pourtant le mappage semble bon puisque je peux insérer des entrées dans ma table en faisant un begin, puis des set et enfin save puis commit.

    Si quelqu'un pouvait me dire vers quoi m'orienter pour résoudre cette exception.

    Merci

  2. #2
    Membre averti
    Profil pro
    Inscrit en
    Mai 2005
    Messages
    45
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2005
    Messages : 45
    Par défaut
    Ah oui,
    mes fichiers de mapping :

    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
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    <?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>
     
            <!-- Database connection settings -->
            <property name="connection.driver_class">oracle.jdbc.xa.client.OracleXADataSource</property>
            <property name="connection.url">jdbc:oracle:thin:@**********</property>
            <property name="connection.username">*******</property>
            <property name="connection.password">********</property>
     
            <!-- JDBC connection pool (use the built-in) -->
            <property name="connection.pool_size">1</property>
     
            <!-- SQL dialect -->
            <property name="dialect">org.hibernate.dialect.OracleDialect</property>
     
            <!-- Enable Hibernate's automatic session context management -->
            <property name="current_session_context_class">thread</property>
     
            <!-- Disable the second-level cache  -->
            <property name="cache.provider_class">org.hibernate.cache.NoCacheProvider</property>
     
            <!-- Echo all executed SQL to stdout -->
            <property name="show_sql">true</property>
     
            <!-- Drop and re-create the database schema on startup -->
            <property name="hbm2ddl.auto">create</property>
     
            <mapping resource="alertmail/AlertTableTemporaire.hbm.xml"/>
            <mapping resource="alertmail/AlertTablePrincipale.hbm.xml"/>
     
        </session-factory>
     
    </hibernate-configuration>
    et le fichier : AlertTableTemporaire.hbm.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
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    <?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="alertmail.AlertTableTemporaire" table="ALERTES_TEMP">
    		 <id name="_id" type="integer">
    		 <column name="ID" sql-type="number"/>
    		 <generator class="increment" />
    		 </id>
     
    		 <property name="_email" type="string">
    		 <column name="EMAIL" sql-type="varchar(255)" not-null="true"/>
    		 </property>
     
    		 <property name="_newEmail" type="string">
    		 <column name="NEW_EMAIL" sql-type="varchar(255)" not-null="true"/>
    		 </property>  
     
    		 <property name="_alertPublication" type="string">
    		 <column name="PUBLICATIONS" sql-type="varchar(255)" not-null="true"/>
    		 </property>    
     
    		 <property name="_alertPressKits" type="string">
    		 <column name="PRESS_KITS" sql-type="varchar(255)" not-null="true"/>
    		 </property>    
     
    		 <property name="_alertPressRelease" type="string">
    		 <column name="PRESS_RELEASES" sql-type="varchar(255)" not-null="true"/>
    		 </property>    
     
    		 <property name="_alertAgenda" type="string">
    		 <column name="AGENDA" sql-type="varchar(255)" not-null="true"/>
    		 </property>    
     
    		 <property name="_format" type="string">
    		 <column name="FORMAT" sql-type="varchar(255)" not-null="true"/>
    		 </property>    
     
        </class>
     
    </hibernate-mapping>

  3. #3
    Modérateur
    Avatar de OButterlin
    Homme Profil pro
    Inscrit en
    Novembre 2006
    Messages
    7 313
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Novembre 2006
    Messages : 7 313
    Billets dans le blog
    1
    Par défaut
    Tu devrais faire
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    List lRequete = session.createQuery("from ALERTES_TEMP").list();
    (là, tu auras une liste d'objet alertmail.AlertTableTemporaire)

    ou alors tu passes par
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    List lRequete = session.createSQLQuery("select ID from ALERTES_TEMP").list();
    A+
    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

  4. #4
    Membre averti
    Profil pro
    Inscrit en
    Mai 2005
    Messages
    45
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2005
    Messages : 45
    Par défaut
    Ca fonctionne bien avec ta 2nde méthode.

    Par contre, si je fais la 1ere, j'ai toujours la même exception de lancée...

  5. #5
    Modérateur
    Avatar de OButterlin
    Homme Profil pro
    Inscrit en
    Novembre 2006
    Messages
    7 313
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Novembre 2006
    Messages : 7 313
    Billets dans le blog
    1
    Par défaut
    Effectivement, avec createQuery, il faut passer par le nom du POJO associé (AlertTableTemporaire il me semble), pas le nom physique de la table...


    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

  6. #6
    Membre averti
    Profil pro
    Inscrit en
    Mai 2005
    Messages
    45
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2005
    Messages : 45
    Par défaut
    Citation Envoyé par OButterlin
    Effectivement, avec createQuery, il faut passer par le nom du POJO associé (AlertTableTemporaire il me semble), pas le nom physique de la table...


    OK. Je vais tester.
    Par contre si j'ai besoin de mettre un WHERE, je fais :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    createQuery ("from AlertTableTemporaire where MAIL like '%" + szMail + "'%")
    par exemple ?

  7. #7
    Membre averti
    Profil pro
    Inscrit en
    Mai 2005
    Messages
    45
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2005
    Messages : 45
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    List lRequete = session.createQuery("from ALERTES_TEMP").list();
    (là, tu auras une liste d'objet alertmail.AlertTableTemporaire)
    Si je fais sur les objets de ma liste un getClass (); ca renvoie Object....
    Je vois pas comment faire

  8. #8
    Modérateur
    Avatar de OButterlin
    Homme Profil pro
    Inscrit en
    Novembre 2006
    Messages
    7 313
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Novembre 2006
    Messages : 7 313
    Billets dans le blog
    1
    Par défaut
    Il faut faire un cast, tout simplement...
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    Iterator it = list.iterator();
    while ( it.hasNext() )
    {
       MonTypeObjet obj = (MonTypeObjet)it.next();
    }
    Sinon, pour faire un where, je te conseil l'objet Criteria plutôt, voici un exemple d'utilisation
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    Criteria query = getSession().createCriteria(Variable.class);    
     query.add(Expression.ilike("typNom", filtreType));
     query.addOrder( Order.asc("varMnemo1") );
     query.list();
    Si tu veux tout de même utiliser Query, il faut utiliser les propriétés du POJO pour les noms de colonnes, pas les noms physiques (à vérifier, moi j'utilise Criteria)...

    A+
    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

  9. #9
    Membre averti
    Profil pro
    Inscrit en
    Mai 2005
    Messages
    45
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2005
    Messages : 45
    Par défaut
    Ca a l'air pas mal effectivement....

    Une dernière question stp...

    Je fais donc :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
        Criteria query = session1.createCriteria(AlertTableTemporaire.class);    
    	query.add(Restrictions.like("_email", szMail));
    	query.list();
    Et quand j'affiche la longueur de ma list, il me mets 17.

    Or je vide ma table à chaque fois et donc y a qu'une seule entrée dans la table Alertes_temp. Je ne comprends donc pas ce résultat.

Discussions similaires

  1. Réponses: 16
    Dernier message: 14/11/2019, 19h28
  2. [EJB] Remote call impossible avec WEBSPHERE
    Par nighma dans le forum Websphere
    Réponses: 1
    Dernier message: 19/06/2006, 16h18
  3. Réponses: 6
    Dernier message: 28/11/2005, 12h03
  4. [D2005]Compilation impossible avec version Personnal
    Par fab56 dans le forum Delphi .NET
    Réponses: 4
    Dernier message: 16/08/2005, 19h10
  5. [Requête] Difficile (impossible ?) avec des dates
    Par starch dans le forum MS SQL Server
    Réponses: 3
    Dernier message: 06/04/2004, 11h26

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