亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

具有聚合內連接的 JPA Criteria 查詢

具有聚合內連接的 JPA Criteria 查詢

慕雪6442864 2023-10-13 15:20:55
我正在嘗試編寫一個 CriteriaQuery 它將查詢每個城市的最新觀察結果。城市由city_code字段定義,最新記錄由observation_time字段定義。我可以輕松地用普通 SQL 編寫它,但我無法理解如何使用 jpa criteria api 來做到這一點。select distinct m.* from   (select city_code cc, max(observation_time) mo  from observations group by city_code) mx, observations m   where m.city_code = mx.cc and m.observation_time = mx.mo`
查看完整描述

2 回答

?
翻過高山走不出你

TA貢獻1875條經驗 獲得超3個贊

當你對寬松的效率持開放態度時,這是可能的。因此,首先讓我們將查詢轉換為邏輯等效查詢:


select distinct m.* from observations m where 

m.observation_time = (select max(inn. observation_time) from observations inn 

                      where inn.city_code = m.city_code);

然后我們將其轉換為 JPA CriteriaQuery:


public List<Observation> maxForEveryWithSubquery() {

    CriteriaBuilder builder = entityManager.getCriteriaBuilder();

    CriteriaQuery<Observation> query = builder.createQuery(Observation.class);

    Root<Observation> observation = query.from(Observation.class);

    query.select(observation);


    Subquery<LocalDateTime> subQuery = query.subquery(LocalDateTime.class);

    Root<Observation> observationInner = subQuery.from(Observation.class);

    subQuery.where(

            builder.equal(

                    observation.get(Observation_.cityCode),

                    observationInner.get(Observation_.cityCode)

            )

    );

    Subquery<LocalDateTime> subSelect = subQuery.select(builder.greatest(observationInner.get(Observation_.observationTime)));

    query.where(

            builder.equal(subSelect.getSelection(), observation.get(Observation_.observationTime))

    );

    TypedQuery<Observation> typedQuery = entityManager.createQuery(query);

    return typedQuery.getResultList();

}


查看完整回答
反對 回復 2023-10-13
?
至尊寶的傳說

TA貢獻1789條經驗 獲得超10個贊

不幸的是,JPA 不支持FROM子句中的子查詢。您需要編寫本機查詢或使用像FluentJPA這樣的框架。



查看完整回答
反對 回復 2023-10-13
  • 2 回答
  • 0 關注
  • 164 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號