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

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

如何根據(jù)函數(shù)的輸出在@Query 中使用查詢字符串

如何根據(jù)函數(shù)的輸出在@Query 中使用查詢字符串

臨摹微笑 2023-06-21 15:52:19
我正在嘗試使用 @Query 注釋進行查詢并且它工作得很好,因為它總是只有一個條件,但現(xiàn)在我有多個條件并且我希望我的查詢字符串根據(jù)參數(shù)動態(tài)更改。假設(shè)我有 2 個字符串列表,listA 和 listB 我希望我的查詢是@Query("SELECT l FROM location AS l WHERE l.a IN :listA")當listA不為空且listB為空時,并且@Query("SELECT l FROM location AS l WHERE l.b IN :listB")當 listB 不為空且 listB 為空時,并且@Query("SELECT l FROM location AS l WHERE l.a IN :listA) AND l.b IN :listB"當兩個列表都不為空時。我一直在嘗試查看是否可以從其他函數(shù)獲取查詢字符串。我可以根據(jù)列表生成字符串,但我只是不知道如何將輸出字符串放入 @Query() 中,因為它位于存儲庫接口中。
查看完整描述

4 回答

?
慕森王

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

您可以使用規(guī)范來實現(xiàn)這一目標。規(guī)范類類似于(假設(shè) a、b 是文本列):

public class LocationSpecification implements Specification<Location> {

? ? public LocationSpecification(final List<String> listA, final List<String> listB) {

? ? ? ? this.listA = listA;

? ? ? ? this.listB = listB;

? ? }


? ? private final List<String> listA;

? ? private final List<String> listB;


? ? @Override

? ? public Predicate toPredicate(Root<Location> root, CriteriaQuery<?> query, CriteriaBuilder cb) {

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

? ? ? ? if (listA != null) {

? ? ? ? ? ? predicates.add(root.<String>get("a").in(listA));

? ? ? ? }

? ? ? ? if (listB != null) {

? ? ? ? ? ? predicates.add(root.<String>get("b").in(listB));

? ? ? ? }

? ? ? ? return cb.and(predicates.toArray(new Predicate[0]));

? ? }

}

存儲庫需要擴展JpaSpecificationExecutor

public?interface?LocationRepository?
??extends?JpaRepository<Location,?Long>,?JpaSpecificationExecutor<Location>?{}

你會這樣稱呼它:

List<Location>?results?=?repository.findAll(new?LocationSpecification(listA,?listB));

PS 上面寫的是我的頭頂,可能需要一些修改。


查看完整回答
反對 回復(fù) 2023-06-21
?
忽然笑

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

使用JPA Specification API?


查看完整回答
反對 回復(fù) 2023-06-21
?
牧羊人nacy

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

您不必總是依賴@Query 來執(zhí)行查詢。更好的選擇是創(chuàng)建存儲過程并根據(jù)您的條件以編程方式調(diào)用它們?;蛘呤褂?Criteria 動態(tài)生成查詢


查看完整回答
反對 回復(fù) 2023-06-21
?
收到一只叮咚

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

Criteria API?/?Specifications?/?Querydsl之間有一個很好的概述/比較。另一個庫是Jooq,它有免費版本。

解決問題的方法是使用其中之一。

我更喜歡 Querydsl 因為

  • 它是類型安全的

  • 它與 Spring Data 配合良好

  • 您可以使用 IDE 中的代碼完成功能

您還應(yīng)該考慮到(目前)Querydsl 維護得不好。


查看完整回答
反對 回復(fù) 2023-06-21
  • 4 回答
  • 0 關(guān)注
  • 199 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

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

幫助反饋 APP下載

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

公眾號

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