【发布时间】:2015-05-08 13:24:31
【问题描述】:
我正在尝试制作这样的东西
SELECT COUNT(*) FROM Tickets WHERE ticketStatus = 3 AND ...
但只能使用 JPA 提供的 CriteriaBuilder。这是我得到的:
private class Criteria {
CriteriaBuilder builder;
CriteriaQuery<TicketModel> query;
Root<TicketModel> root;
public Criteria() {
builder = em.getCriteriaBuilder();
query = builder.createQuery(TicketModel.class);
root = query.from(TicketModel.class);
}
}
public long getSearchResultsQuantity(SearchModel search) {
Criteria c = new Criteria();
List<Predicate> params = new ArrayList<Predicate>();
if (search.getStartDate() != null && search.getEndDate() != null) {
params.add(c.builder.between(c.root.get(TicketModel_.ticketDate), search.getStartDate(),
search.getEndDate()));
}
if (search.getStatus() != -1) {
params.add(c.builder.equal(c.root.get(TicketModel_.ticketStatus), search.getStatus()));
}
CriteriaQuery<Long> q = c.builder.createQuery(Long.class);
return em.createQuery(
q.select(c.builder.count(q.from(TicketModel.class))).where(params.toArray(new Predicate[] {})))
.getSingleResult();
}
但是,当我尝试执行此查询时,我收到了这样的异常:
org.hibernate.hql.internal.ast.QuerySyntaxException: Invalid path: 'generatedAlias1.ticketStatus' [select count(generatedAlias0) from com.mif.spring.models.TicketModel as generatedAlias0 where generatedAlias1.ticketStatus=0]
我在 Spring 有点小白,所以任何帮助都将不胜感激!
【问题讨论】:
-
TicketModel_的参数来自哪里?不应该是TicketModel -
由于问题与Spring无关,所以我删除了标签。