2012-04-29 140 views
0

我有以下這在SQL軟件(HeidiSQL)完美運行SQLSQL在玩遊戲!框架

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']

我修改了HQL到

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(); 

,仍然收到錯誤:

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

所以我該如何解決這個問題?

回答

1

爲了能夠在HQL中的兩個實體之間建立連接,您需要在這兩個實體之間建立關聯。在任何情況下,你都不能在兩個不相關的實體之間進行連接,就像你可以在SQL中一樣。在Hibernate documentation中詳細描述了HQL及其加入功能。

如果您確實需要這種類型的聯接,請使用本機查詢。

+0

謝謝。我只是將createQuery修改爲CreateNativeQuery,並在查詢語句中進行了一些小調整(使用HeidiSQL中的原始調整,現在可以工作。 – 2012-04-29 23:44:21