2016-07-20 9 views
1

私はhibernate(バージョン3.5.3)でクエリを実行しようとしています。このクエリには、異なるテーブル間のいくつかの結合(4つのテーブル)が含まれています。これはクエリです: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) 

最初に文法エラーが発生しました。この問題を解決するのに役立つ人がいますか。

PS:私もJOINコマンドを使用せずに、これは元のクエリで参加する私が作ることができることを知っている:

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 

しかし、それはいくつかのCROSS JOINを作成するので、私は上の(s)は、このフォームを使用することはできませんMySQLデータベースとこれは良くありません。エイリアスを変更する必要がありますので

+2

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のように見えます。また、あなたが持っているものはHQLではありません。 SQL – Jens

+0

簡単に言うと、エンティティを適切にモデル化し、そのような結合を行うべきではありません。とにかく、Hibernateの最新バージョンはこの種の任意結合を提供しますが、必要がない限り、この使用を推奨しません。適切なエンティティモデルを作成する必要があるORMを使用するという考え全体を破棄しているだけです。 –

+0

これらのテーブルをマッピングするHibernateエンティティを見せてください。 – Dherik

答えて

2

ifは、SQLのキーワードです:SQLのキーワードであれば

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

エイリアスを変更しましたが、ONで同じ問題が発生しました。 ps:それはSQLではないSQLの°W° – Removed

+2

@Removed同じエラーとは思わないでください。 HQLでは、あなたは上書きしないでください。あなたはカラム名ではなくプロパティで作業する必要があります – Jens

+0

JOIN(ここで書いた2番目のクエリ)を使わずにクエリを作成しようとしましたが、データベースにCROSS JOIN(s)が行われます。 – Removed