2016-07-20 2 views
1

J'essaie de faire une requête sur hql hibernate (version 3.5.3), la requête inclut plusieurs jointures entre différentes tables (4 tables). C'est la requête:Rejoindre Hibernate HQL

 SELECT (lot of stuff) 
    FROM InvestigationRule as ir 
    JOIN InvestigationFormula as if ON (ir.tb33InvestigationFormula=if.idInvestigationFormula) 
    JOIN InvestigationEvent as ie ON (ir.tb27InvestigationEvent=ie.idInvestigationEvent) 
    JOIN InvestigationSectionEvent as ise ON (ie.eventSection=ise.sectionEventsCod) 

J'ai rencontré une erreur de syntaxe sur ON, quelqu'un peut-il m'aider à résoudre ce problème, thx.

ps: je sais que je peux faire des jointures même sans utiliser la commande JOIN, c'est la requête originale:

SELECT (lot of stuff) 
    FROM InvestigationRule AS ir, 
     InvestigationEvent as ie, 
     InvestigationSectionEvent as ise, 
     InvestigationFormula as if 
      WHERE ir.dateValidityEnd is null 
      AND ir.tb27InvestigationEvent = ie.idInvestigationEvent 
      AND ir.tb33InvestigationFormula = if.idInvestigationFormula 
      AND ie.eventSection = ise.sectionEventsCod 

Mais je ne peux pas utiliser ce formulaire, car il crée plusieurs CROSS JOIN (s) sur le Base de données MySQL et ce n'est pas bon.

+2

si est un mot-clé dans SQL. Et aussi ce que vous avez n'est pas HQL. C'est SQL – Jens

+0

En bref, modélisez correctement vos entités et vous ne devriez pas faire de jointures comme ça. Quoi qu'il en soit, la dernière version d'Hibernate fournit ce type de jointure arbitraire mais je ne recommanderai pas de l'utiliser à moins que cela ne soit nécessaire. Cela ne fait que ruiner l'idée d'utiliser ORM pour créer un modèle d'entité approprié. –

+0

Montrez-nous les entités Hibernate qui mappent ces tables. – Dherik

Répondre

2

if est un mot-clé dans SQL de sorte que vous devez changer l'alias:

SELECT (lot of stuff) 
    FROM InvestigationRule as ir 
    JOIN InvestigationFormula as iform ON (ir.tb33InvestigationFormula=iform.idInvestigationFormula) 
    JOIN InvestigationEvent as ie ON (ir.tb27InvestigationEvent=ie.idInvestigationEvent) 
    JOIN InvestigationSectionEvent as ise ON (ie.eventSection=ise.sectionEventsCod) 

HQL On dirait:

SELECT (lot of stuff) 
    FROM InvestigationRule ir 
    JOIN ir tb33InvestigationFormula iform 
    JOIN ir.tb27InvestigationEvent ie 
    JOIN ie.eventSection ise 
+0

J'ai changé l'alias mais j'ai rencontré le même problème sur le ON. ps: c'est hql pas sql ° W ° – Removed

+2

@Removed Ne pensez pas que c'est la même erreur. En HQL, vous n'avez pas besoin d'écrire dessus. Vous devez travailler avec les propriétés pas avec les noms de colonnes – Jens

+0

J'ai essayé de faire la requête sans utiliser JOIN (la deuxième requête que j'ai écrite ici) mais elle fait CROSS JOIN (s) sur la base de données et je devrais éviter cela. – Removed