第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

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

具有聚合內(nèi)連接的 JPA Criteria 查詢

具有聚合內(nèi)連接的 JPA Criteria 查詢

慕雪6442864 2023-10-13 15:20:55
我正在嘗試編寫一個 CriteriaQuery 它將查詢每個城市的最新觀察結(jié)果。城市由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條經(jīng)驗 獲得超3個贊

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


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);

然后我們將其轉(zhuǎn)換為 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();

}


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

TA貢獻1789條經(jīng)驗 獲得超10個贊

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



查看完整回答
反對 回復(fù) 2023-10-13
  • 2 回答
  • 0 關(guān)注
  • 162 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動學(xué)習(xí)伙伴

公眾號

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號