2

以下のような関連付けでサブクエリを使用できるかどうかは誰にもわかりません。

SELECT l, o
FROM User u
    INNER JOIN u.licenses l
    LEFT JOIN l.orders o 
        WITH o.id = (
            SELECT MAX(lastOrder.id)
            FROM Order lastOrder
            WHERE lastOrder.license = l
        )
WHERE u.idtPerson = :idtPerson
    AND l.statusCode != 3

この回避策を見つけました...

SELECT l, o
FROM User u
    INNER JOIN u.licenses l
    LEFT JOIN l.orders o
WHERE u.idtPerson = :idtPerson
    AND l.statusCode != 3
    AND (
        o.id IS NULL
        OR o.id = (
            SELECT MAX(lastOrder.id)
            FROM Order lastOrder
            WHERE lastOrder.license = l
        )
    )

しかし、私はそれが良い解決策ではないと本当に信じています、何か提案はありますか?

4

1 に答える 1

0

別のオプションは、別のクエリでサブクエリを作成し、maxresults=1 でリストし、パラメーターで元のクエリに渡すことです。

このようなもの:

Query hqlQuery = session.createQuery("SELECT MAX(lastOrder.id)
                                      FROM Order lastOrder
                                      WHERE lastOrder.license = l");    
hqlQuery.setMaxResults(1);
List results = hqlQuery.list();
Integer maxId = null;
if (!results.isEmpty()){
   maxId = results.get(0);
}
Query hqlQuery1 = session.createQuery("SELECT l, o
                                       FROM User u
                                       INNER JOIN u.licenses l
                                       LEFT JOIN l.orders o 
                                       WITH o.id = :maxId
                                       WHERE u.idtPerson = :idtPerson
                                       AND l.statusCode != 3");
hqlQuery1.setParameter("maxId", maxId);
hqlQuery1.list();
...etc...

多分これはあなたのために働くでしょう

于 2013-05-31T01:46:28.737 に答える