How to correctly convert JPQL query using “%”

喜欢而已 提交于 2019-12-08 10:06:51

问题


I have this query (works fine):

@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;
}

but I want to convert it into this (with .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;
}

In this case i get: java.lang.IllegalArgumentException: org.hibernate.hql.internal.ast.QuerySyntaxException: unexpected token: %

How corectly use % (I tried '%:name%', '%':name'%') ?


回答1:


Let's try this way :

@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;
}


来源:https://stackoverflow.com/questions/26137496/how-to-correctly-convert-jpql-query-using

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!