2012-04-29 11 views
0

プレイ中にそれを置くとき、私はSQLソフトウェアで完全に実行するSQL(HeidiSQL)SQL!枠組み

SELECT gl2.documentNumber, gl2.debitAmount, gl2.creditAmount, 
gl2.account, gl2.description FROM GeneralLedger AS gl1 
LEFT JOIN GeneralLedger AS gl2 
ON gl1.documentNumber = gl2.documentNumber 
WHERE gl1.account='911' AND gl2.account <> '911'; 

を以下ました!コントローラは、私がこれを使用します。

 String queryPL = "SELECT gl2.documentNumber, gl2.debitAmount, gl2.creditAmount, " 
      + "gl2.account, gl2.description FROM GeneralLedger AS gl1 " 
      + "LEFT JOIN GeneralLedger AS gl2 " 
      + "ON gl1.documentNumber = gl2.documentNumber " 
      + "WHERE gl1.account='911' AND gl2.account <> '911'"; 
    Query query = JPA.em().createQuery(queryPL); 
    List<Object[]> profitAndLoss = query.getResultList(); 

、エラーを受け取った:

IllegalArgumentException occured : org.hibernate.hql.ast.QuerySyntaxException: unexpected token: ON near line 1, column 156 [SELECT gl2.documentNumber, gl2.debitAmount, gl2.creditAmount, gl2.account, gl2.description FROM models.GeneralLedger AS gl1 LEFT JOIN GeneralLedger AS gl2 ON gl1.documentNumber = gl2.documentNumber WHERE gl1.account='911' AND gl2.account <> '911']

を私は

String queryPL = "SELECT gl2.documentNumber, gl2.debitAmount, gl2.creditAmount, " 
       + "gl2.account, gl2.description FROM models.GeneralLedger AS gl1 " 
       + "LEFT OUTER JOIN models.GeneralLedger AS gl2 " 
       + "WITH gl1.documentNumber = gl2.documentNumber " 
       + "WHERE gl1.account='911' AND gl2.account <> '911'"; 
     Query query = JPA.em().createQuery(queryPL); 
     List<Object[]> profitAndLoss = query.getResultList(); 

にHQLを改訂し、それでもエラーが表示さ:だから

IllegalStateException occured : DOT node with no left-hand-side!

をどうすればこの問題を解決できますか?

答えて

1

HQL内の2つのエンティティ間で結合を行うには、これらの2つのエンティティ間の関連付けが必要です。 SQLのような任意の条件で、無関係な2つのエンティティを結合することはできません。 HQLとその結合機能は、Hibernate documentationに詳細に説明されています。

このタイプの結合が本当に必要な場合は、ネイティブクエリを使用します。

+0

ありがとうございます。私はちょうどCreateNativeQueryへのcreateQueryと、HeidiSQLのようなオリジナルのものを使っていて、現在はそれが仕事です。 –

関連する問題