如何使用"%"正确转换JPQL查询

时间:2014-10-01 08:47:16

标签: java hibernate jpql

我有这个查询(工作正常):

@Override
public List<Product> getProductsByName(String name) {
    Query q = em.createQuery("SELECT p FROM Product p WHERE p.productName LIKE '%"+name+"%'");
    @SuppressWarnings("unchecked")
    List<Product> pro = q.getResultList();
    return pro;
}

但我想将其转换为此(使用.setParameter()):

@Override
public List<Product> getProductsByName(String name) {
    Query q = em.createQuery("SELECT p FROM Product p WHERE p.productName LIKE %:name %")
    .setParameter("name", name);
    @SuppressWarnings("unchecked")
    List<Product> pro = q.getResultList();
    return pro;
}

在这种情况下,我得到: java.lang.IllegalArgumentException:org.hibernate.hql.internal.ast.QuerySyntaxException:意外令牌:%

如何使用%(我试过&#39;%:名称%&#39;,&#39;%&#39;:名称&#39;%&#39;)?

1 个答案:

答案 0 :(得分:3)

让我们这样试试:

@Override
public List<Product> getProductsByName(String name) {
  Query q = em.createQuery("SELECT p FROM Product p WHERE p.productName LIKE :name")
  q.setParameter("name", '%'+name+'%');
  @SuppressWarnings("unchecked")
  List<Product> pro = q.getResultList();
  return pro;
}