在 JPA 2 中使用构造函数表达式时排序

order by when using Constructor Expressions in JPA 2

作为 JSR-338 的一部分,出现了使用构造函数表达式的功能。 问题是在使用构造函数表达式时如何使用 order by

给定 JPQL 示例:

select com.acme.AggregatedInfo(
    c,
    (select status from Account where ssn = c.ssn)
)
from Customer c 
where m.id in (:customerIdList)    

以及 class AggregatedInfo

class AggregatedInfo {

    private final Customer customer;
    private final String status;

    public AggregatedInfo(Customer customer, String status) {...}

    // boilerplate javacode....
}

我在这样的 DAO 中使用它:

public List<AggregatedInfo> getAggregatedResult(final List<Long> customerIdList)
    return em.createQuery(hql, AggregatedInfo.class)
        .setParameters("customerIdList", customerIdList)
        .getResultList();
}

如果我想按状态排序 - 如何通过 JPQL 完成?

我尝试了以下但没有成功:

select com.acme.AggregatedInfo(
    c,
    (select status from Account where ssn = c.ssn)
) as a
from Customers c 
where m.id in (:customerIdList)    
order by c.status

但这不起作用。

可行吗? 请解释。

尝试以下操作。它在 Hibernate 中的类似实现对我有用。它应该也适合你

public List<AggregatedInfo> getAggregatedResult(final List<Long> customerIdList)
    return em.createNativeQuery(hql, AggregatedInfo.class)
        .setParameters("customerIdList", customerIdList)
        .getResultList();
}

entityManager.createQuery()替换为entityManager.createNativeQuery()