Mysql
 sql >> Database >  >> RDS >> Mysql

JPA CriteriaBuilder come creare una query join + like

  1. la selezione non è chiara. In SQL si seleziona s.*, p.name, p.code , ma nei criteri ti aspetti un Long ?

  2. il tuo LEFT JOIN non deve essere LEFT .

  3. nei criteri non sei affatto iscritto.

  4. dovresti usare metamodel, come consiglio generale.

Penso che tu voglia tutti gli Stock s che contengono almeno un Product con nome come %value% .

Se la mia ipotesi è giusta:

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();