在 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()
作为 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()