我有一个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));
请帮助,如何做得更好?
答案 0 :(得分:0)
选择不明确。在SQL中,您选择s.*, p.name, p.code
,但在标准中,您期望Long
?
您的LEFT JOIN
不得LEFT
。
标准中您根本没有加入。
您应该使用元模型作为一般建议。
我认为您希望所有Stock
包含至少一个名为Product
的%value%
。
如果我的假设是对的:
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();