首页 > 解决方案 > 我不知道如何在hibernate中将sql查询转换为criteriabuilder?

问题描述

我需要一个总预算值。我可以从sql查询中得到答案,但问题是如何将sql查询转换为hibernate中的criteriaBuilder。在sql查询下面:

SELECT SUM(ab.daily_budget) as todayBudgetTar FROM api_budget ab INNER JOIN api_ad_groups ad on ad.ad_group_id= ab.adgroup_id INNER JOIN api_campaigns c on c.campaign_id =ad.campaign_id INNER JOIN api_user_account ac on ac.user_id=ad.user_id WHERE ad .user_id = 234 AND ad.status=0 AND c.status=1 按“todayBudgetTar”分组

如果有人知道请帮助我。

标签: mysqlhibernatehibernate-mappinghibernate-criteria

解决方案


CriteriaBuilder criteriaBuilder = entityManager.getCriteriaBuilder();
CriteriaQuery<Object[]> query = criteriaBuilder.createQuery(Object[].class);

Root<ApiBudget> budget = query.from(ApiBudget.class);
Root<ApiAdGroups> adGroups = query.from(ApiAdGroups.class);
Root<ApiCampaigns> campaigns = query.from(ApiCampaigns.class);
Root<ApiUserAccount> userAccount = query.from(ApiUserAccount.class);

//this one is on your entity field name
query.select(criteriaBuilder.sum(budget.get("dailyBudget"));

List<Predicate> predicates = new ArrayList<Predicate>();

predicates.add(
        qb.equal(adGroups.get("adGroupId"), budget.get("adGroupId")));
predicates.add(
        qb.equal(campaigns.get("campaignId "), adGroups.get("campaignId")));
predicates.add(
        qb.equal(userAccount.get("userId"), adGroups.get("userId")));

predicates.add(
        qb.equal(adGroups.get("userId"), 234));

predicates.add(
        qb.equal(adGroups.get("status"), 0));

predicates.add(
        qb.equal(campaigns.get("status"), 1));

query.where(predicates.toArray(new Predicate[]{}));


query.groupBy(budget.get("dailyBudget"));


TypedQuery<Object[]> typedQuery = entityManager.createQuery(query);
List<Object[]> resultList = typedQuery.getResultList();

嗨,我认为这应该工作


推荐阅读