如何將 Map 映射到 Spring Data Jpa 中的 Repository 中的查詢?
以下是我的通用存盤庫源。
@NoRepositoryBean
public interface GenericRepository<T, ID> extends JpaRepository<T, ID> {
@Query("select t from #{#entityName} t "
"where t.queryParams.getKey = queryParmas.getValue")
Page<T> findByQueryParams(HashMap<String, String> queryParams, Pageable pageable);
}
如下,我想接收queryParams作為引數,并將queryParams對應的key和value映射到where子句。
由于是GenericRepository,所以無法實作,想把Map的內容放到@Query中。
我一直在尋找,但我找不到任何關于它的東西,所以我不知道如何解決這個問題。
如果有什么辦法,請告訴我。
最好的祝福
uj5u.com熱心網友回復:
您可能想要使用 JPA 標準查詢https://www.baeldung.com/hibernate-criteria-queries
uj5u.com熱心網友回復:
您需要 Spring JPA 動態查詢。我準備了一個滿足您需求的小型應用程式。我希望它會有用。
github:動態查詢
uj5u.com熱心網友回復:
請試試這個:
EntityManager em;
public List<Member> get(Map<String, String> map) {
CriteriaBuilder cb = em.getCriteriaBuilder();
CriteriaQuery<Member> cq = cb.createQuery(Member.class);
Root<Member> root = cq.from(Member.class);
List<Predicate> predicates = new ArrayList<>();
for (Map.Entry<String, String> e : map.entrySet()) {
Predicate a = cb.equal(root.get("name"), e.getKey());
Predicate b = cb.equal(root.get("relationName"), e.getValue());
predicates.add(cb.and(a, b));
}
cq.where(cb.or(predicates.toArray(new Predicate[0])));
return em.createQuery(cq).getResultList();
}
如何將 Map 或 List 作為引數傳遞給 JPA 查詢
如何使用 Spring Data 訪問 EntityManager
轉載請註明出處,本文鏈接:https://www.uj5u.com/gongcheng/478769.html
上一篇:JPACriteriaQuery:如何為multiSelect選擇默認值
下一篇:標準API加入過濾器
