小编Tha*_*del的帖子

JPA 2 + Criteria API - 定义子查询

到目前为止,我尝试将SQL查询转换为Criteria API但没有成功.我可以创建两个单独的查询,返回我需要的值,但我不知道如何在单个查询中组合它们.

这是有效的sql语句:

select company.*, ticketcount.counter from company
    join 
(select company, COUNT(*) as counter from ticket where state<16 group by company) ticketcount
on company.compid = ticketcount.company;
Run Code Online (Sandbox Code Playgroud)

此Criteria查询返回内部查询结果:

CriteriaBuilder cb = em.getCriteriaBuilder();
CriteriaQuery<intCompany> qTicket = cb.createQuery(intCompany.class);
Root<Ticket> from = qTicket.from(Ticket.class);
Path groupBy = from.get("company");        
Predicate state = cb.notEqual(from.<State>get("state"), getStateById(16));        
qTicket.select(cb.construct(
    intCompany.class, cb.count(from),from.<Company>get("company")))
        .where(state).groupBy(groupBy);                
em.createQuery(qTicket).getResultList();
Run Code Online (Sandbox Code Playgroud)

在应用程序中我定义了一个小包装器/辅助类:

public  class intCompany{
    public Company comp;
    public Long opentickets;
    public intCompany(Long opentickets,Company comp){
        this.comp = comp;
        this.opentickets = opentickets;
    }
    public intCompany(){

    }
}
Run Code Online (Sandbox Code Playgroud)

那么有谁知道如何使这个工作?

更新 …

java hibernate subquery criteria-api jpa-2.0

5
推荐指数
1
解决办法
9745
查看次数

标签 统计

criteria-api ×1

hibernate ×1

java ×1

jpa-2.0 ×1

subquery ×1