0

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 が発生しました: org.hibernate.hql.ast.QuerySyntaxException: 予期しないトークン: 1 行目、列 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 が発生しました: 左側のない DOT ノード!

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

4

1 に答える 1

1

HQL で 2 つのエンティティを結合できるようにするには、これら 2 つのエンティティを関連付ける必要があります。SQL のように、2 つの無関係なエンティティを任意の条件で結合することはできません。HQL とその結合機能については、Hibernate のドキュメントで詳しく説明されています。

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

于 2012-04-29T17:37:32.527 に答える