簡體   English   中英

JPA CriteriaBuilder如何創建join + like查詢

[英]JPA CriteriaBuilder how to create join + like query

我有一個SQL查詢:

   SELECT s.*, p.name, p.code 
     FROM `stock` s 
LEFT JOIN product p ON s.product_id = p.id 
    WHERE p.name LIKE "%q%"

我需要使用criteriabuilder創建查詢

我這樣開始:

CriteriaBuilder cb = em.getCriteriaBuilder();
CriteriaQuery<Long> cq = cb.createQuery(Long.class);
Root<Stock> stock = cq.from(Stock.class);

Path<String> path = stock.get(filter.getKey());//i have error here
String likeValue = wildCard + value + wildCard;
Predicate filterCondition = cb.conjunction();
filterCondition = cb.and(filterCondition, cb.like(path, likeValue));

請幫幫忙,怎么做得更好?

  1. 選擇不清楚。 在SQL中你選擇s.*, p.name, p.code ,但在你期望Long標准中?

  2. 你的LEFT JOIN不是LEFT

  3. 在標准中你根本沒有加入。

  4. 你應該使用metamodel作為一般建議。

我想你想要所有包含至少一個名稱為%value% Product Stock

如果我的假設是正確的:

CriteriaBuilder cb = em.getCriteriaBuilder();

CriteriaQuery<Stock> cq = cb.createQuery(Stock.class);

Root<Stock> stock = cq.from(Stock.class);
Join<Stock, Product> product = stock.join(Stock_.products);

cq.select(stock);
cq.distinct(true);
cq.where(cb.like(product.get(Product_.name), "%" + value + "%");

return em.createQuery(cq).getResultList();

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM