加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > Java > 正文

java – JPA 2 Criteria API – 定义子查询

发布时间:2020-12-14 19:17:38 所属栏目:Java 来源:网络整理
导读:到目前为止,我尝试将SQL查询转换为Criteria API但没有成功.我可以创建两个单独的查询,返回我需要的值,但我不知道如何在单个查询中组合它们. 这是有效的sql语句: select company.*,ticketcount.counter from company join (select company,COUNT(*) as count

到目前为止,我尝试将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;

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

CriteriaBuilder cb = em.getCriteriaBuilder();
CriteriaQuery

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

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

    }
}

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

更新

谢谢.我按照你的建议改变了我的标准查询.我只需要在最后添加一个循环来获取我想要的信息.

List

也许只是不可能将原始的sql转换为Criteria API.

另一个更新

我想我必须将原来的sql表达式更改为

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

否则我不会让票证表中没有条目的公司.

还有其他建议吗?

最佳答案
你几乎完成了一切.

//---//
CriteriaBuilder cb = em.getCriteriaBuilder();
//Your Wrapper class constructor must match with multiselect arguments
CriteriaQuery

这应该按预期工作.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读