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 :

Unexpected Token dans requete HQL avec jointures


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
    Septembre 2009
    Messages
    25
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2009
    Messages : 25
    Par défaut Unexpected Token dans requete HQL avec jointures
    Bonjour tout le monde!

    Je me tourne vers vous après 2 jours de réflexions (non sans résultat).

    Mon problème est le suivant:
    je dois effectuer une requete via hibernate (en HQL du coup ^^)
    mais l'erreur suivante se produit:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    org.hibernate.hql.ast.QuerySyntaxException: unexpected token: select near line 1, column 80
    voici la erquête en question:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    select product_id as productID ,contactID ,clientID 
    from product p inner join 
    (select deleted as deleted, tranche_set_id as trancheID, contact_tranche_id as contactID,clients_id as clientID from tranche tr inner join contact c) result on p.product_id = result.trancheID 
    where clientID='2' group by productID
    Je suis parti d'une version SQL de cette requête qui marche niquel quand j'attaque la bdd directement j'ai essayé de faire la conversion en HQL mais ca ne marceh pas.
    J'ai l'impression qu'il bloque sur le select de la jointure, mais je vois pas pourquoi...

    Si vous avez des avis ou des conseils à ce sujet ca serait super TOP!!!

    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
    Tu as lu le chapitre sur les requêtes HQL dans la documentation ?
    Ce que tu as fait ne ressemble pas à du HQL.

  3. #3
    Membre averti
    Profil pro
    Inscrit en
    Septembre 2009
    Messages
    25
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2009
    Messages : 25
    Par défaut
    oui d'ailleurs je la relisais en ce moment même et j'ai apporté quelques modification sur la jointure car hql n'a pas besoin des condition de jointure grace au mapping.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    select product_id as productID ,contactID ,clientID 
    from product p inner join 
     
    (select deleted as deleted, tranche_set_id as trancheID, contact_tranche_id as contactID,clients_id as clientID from tranche tr inner join contact c  )
     
    where clientID='2' group by productID
    ca marche pas mieux...
    cela dit dans la doc, les syntaxes se ressemblent beaucoup (utilisation des select en particulier)

    En gros ce que je veux faire c'est une triple jointure, pour recuperer les produits traités par un client donné, sachant que l id du client n'accessible que par la table contact (relation many to one dans la table contact)
    il faut donc que je joigne les 3 non?

    u y a t il une manière plus élégante?
    par exemple, envoyer directement le requete SQL qui marche...?

  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
    Tu peux utiliser une SQLQuery (en SQL donc) au lien d'une Query (en HQL).

    Je ne pense pas que ce soit possible de faire des sous-requêtes dans la clause select. A vérifier dans la doc.

    Montre nous tes mappings qu'on puisse essayer d'écrire la requête.

  5. #5
    Membre averti
    Profil pro
    Inscrit en
    Septembre 2009
    Messages
    25
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2009
    Messages : 25
    Par défaut
    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
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
     
    <class name="com.calyon.customx.model.acteurs.Contact" lazy="false"	table="Contact">
    		<id name="id" type="long" unsaved-value="0">
    			<column name="contact_id" not-null="true" />
    			<generator class="native" />
    		</id>
    		<property name="nom">
    			<column name="name" />
    		</property>
    		<property name="prenom">
    			<column name="firstname" />
    		</property>
    		<property name="mail">
    			<column name="mail" />
    		</property>
     
    		<property name="telephone">
    			<column name="phone" />
    		</property>
     
    		<property name="pole">
    			<column name="Pole"></column>
    		</property>
    		<property name="password" column="password"/>
    		<many-to-one name="client" column="clients_id" class="com.calyon.customx.model.acteurs.Client" />
    	</class>
     
     
    <class  name="com.calyon.customx.model.acteurs.Client" lazy="false" table="Client">
    		<id name="clientId" type="long" unsaved-value="0">
    			<column name="client_id" not-null="true" />
    			<generator class="native" />
    		</id>
    		<property name="client_name" column="client_name"/>
    		<property name="clientCode" column="clientCode"/>
    		<property name="codeRTS" column="codeRTS"/>
    		<property name="RGV" column="RGV"/>
    		<property name="euroclear" column="euroclear"/>		
    		<property name="clearstream" column="clearstream"/>		
    		<set name="contactList" cascade="all, delete-orphan" lazy="false">
    			<key column="clients_id"/>
    			<one-to-many class="com.calyon.customx.model.acteurs.Contact"/>
     
    		</set>
    </class>
     
    <class name="com.calyon.customx.model.produit.Tranche" lazy="false" table="tranche">
    		<id name="id" type="long" unsaved-value="0">
    			<column name="tranche_id" not-null="true"/>
    			<generator class="native"></generator>
    		</id>
    		<property name="settlementDate" type="timestamp" column="settlement_date"/>
    		<property name="type" column="type"/>
    		<property name="montant" column="montant"/>
    		<property name="tradingSize" column="trading_size"/>
    		<property name="addDate" column="add_date" type="timestamp"/>
    		<property name="agence" column="agence"/>
    		<property name="account" column="account"/>
    		<property name="comment" column="comment"/>
    		<property name="finalClient" column="finalClient"/>
    		<property name="deleted" column="deleted" type="true_false"/>
    		<many-to-one name="Contact"  unique="false"  column="contact_tranche_id" class="com.calyon.customx.model.acteurs.Contact"/>
    		<many-to-one name="pricingContext" column="pricing_id" class="com.calyon.customx.model.produit.PricingContext"/> 
    		<many-to-one name="clientFinal" column="client_final" class="com.calyon.customx.model.acteurs.Client"/> 
    		<property name="checkedMargin" column="checkedMargin" type="true_false"/>
     
    	</class>
     
    <class name="com.calyon.customx.model.produit.Product" lazy="false" table="product">
    		<id name="id" type="long" unsaved-value="0">
    				<column name="product_id" not-null="true"/>
    				<generator class="native"></generator>
    		</id>
    		<property name="categorieName" column="category_name"/>
    		<property name="ref" column="ref"/>
    		<property name="Pricer" column="pricer"/>
    		<property name="other" column="other"/>
    		<property name="support" column="support"/>
    		<property name="droit" column="droit"/>
    		<property name="tmID" column="tmID"/>
    		<property name="idCotation" column="id_cotation"/>
    		<property name="deleted" column="deleted" type="true_false"/>
    		<property name="swapswire" column="swapswire" type="true_false"/>
    		<property name="swapswireNumber" column="swapswireNumber"/>
    		<property name="sideOTC" column="sideOTC"/>
    		<set name="listTranche" lazy="false" cascade="all">
    	            <key column="tranche_set_id"/>
    	            <one-to-many class="com.calyon.customx.model.produit.Tranche"/>
    	    </set>
    	    	<property name="firstTradeDate" column="firstTradeDate" type="timestamp"/>
     
    	 <set name="listContact" lazy="false" cascade="all">
    	            <key column="contact_set_id"/>
     
    	            <one-to-many class="com.calyon.customx.model.acteurs.Contact"/>
    	    </set> 
    		<many-to-one name="productDescription" column="global_description_id" class="com.calyon.customx.model.description.ProductDescription"/>
    		<property name="status" column="status"/>
     
    		<set name="productTasks" lazy="false" cascade="all">
    	            <key column="taches_produits_set_id"/>
     
    	            <one-to-many class="com.calyon.customx.model.checking.TachesProduit"/>
    	    </set>
    	      <set name="callDate" lazy="false" table="call_date" cascade="all,delete-orphan">
    	            <key column="product_id"/>
    	            <element type="timestamp" column="Call_date"/>
    	    </set>
    	     <set name="putDate" lazy="false" table="put_date" cascade="all,delete-orphan">
    	            <key column="product_id"/>
    	            <element type="timestamp" column="put_date"/>
    	    </set>
    	     <set name="switchDate" lazy="false" table="switch_date" cascade="all,delete-orphan">
    	            <key column="product_id"/>
    	            <element type="timestamp" column="switch_date"/>
    	    </set>
     
     
    	</class>
    pour info je vous donne la version SQL qui marche:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    select product_id as productID ,clientID 
    from product p inner join 
        (select deleted, tranche_set_id as trancheID, contact_tranche_id as   contactID,clients_id as clientID from tranche tr inner join contact c on tr.contact_tranche_id = c.contact_id ) result 
    on p.product_id = result.trancheID 
    where p.deleted='F' and result.deleted='F' and clientID='2' group by productID;

  6. #6
    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
    Essaie un truc du genre, il faudra surement adapter :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    select p from Product p inner join p.listTranche tranche
    where tranche.clientFinal.clientId = 2 and tranche.deleted = false and p.deleted = false

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

Discussions similaires

  1. Requete SQL avec jointure multiple
    Par kissskoool dans le forum Langage SQL
    Réponses: 5
    Dernier message: 20/01/2008, 01h07
  2. Requete update avec jointure d'une requête
    Par bart64 dans le forum Requêtes et SQL.
    Réponses: 10
    Dernier message: 28/05/2007, 20h31
  3. Requete HQL avec jointure
    Par chriscoolletoubibe dans le forum Hibernate
    Réponses: 50
    Dernier message: 24/04/2007, 15h54
  4. Requete SELECT avec jointures
    Par escteban dans le forum Requêtes
    Réponses: 10
    Dernier message: 18/04/2007, 12h16
  5. Afficher une requete MYSQL avec jointure
    Par Higestromm dans le forum Requêtes
    Réponses: 8
    Dernier message: 18/12/2005, 15h52

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