java - JPA CriteriaBuilder 如何创建 join + like 查询

标签 java mysql jpa orm criteria

我有一个 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. 作为一般建议,您应该使用元模型。

我认为您想要所有 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();

关于java - JPA CriteriaBuilder 如何创建 join + like 查询,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41647477/

相关文章:

java - 我怎样才能得到 HttpResponseException 背后的实际错误?

java - 在 Java 中获取 InputStream 的大小

php - 无法选择 JSON 数据类型的表

java - 如何将查询的结果集映射到表以外的不同实体

java - Spring Boot + Hibernate JPA 配置以使用 EntityManager

java - 将文本转换为可执行语句

java - Windows、Gradle 和 Cucumber 组合在生成报告时抛出 IOException

java - 将 @EmbeddedId 表示为 H2 数据库的 SQL

php - 如何使用 PHP 检查数据是否已存在于 MySQL 中

jpa - JPQL left outer join 多对多关系