-
việc lựa chọn không rõ ràng. Trong SQL, bạn chọn
s.*, p.name, p.code
, nhưng trong tiêu chí, bạn mong đợi mộtLong
? -
LEFT JOIN
của bạn không đượcLEFT
. -
trong các tiêu chí mà bạn hoàn toàn không tham gia.
-
bạn nên sử dụng metamodel, như một lời khuyên chung.
Tôi nghĩ bạn muốn tất cả Stock
s chứa ít nhất một Product
với tên như %value%
.
Nếu giả định của tôi là đúng:
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();