如何使用“%”正确转换JPQL查询 [英] How to correctly convert JPQL query using "%"

查看:187
本文介绍了如何使用“%”正确转换JPQL查询的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

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

  @Override 
public List< Product> getProductsByName(String name){
Query q = em.createQuery(SELECT p FROM Product p WHERE p.productName LIKE'%+ name +%');
@SuppressWarnings(unchecked)
列表< 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)
列表< Product> pro = q.getResultList();
return pro;



$ b $ p
$ b

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



正确地使用%(我试过'%:name%','%':name '%')?

解决方案

让我们试试这个方法:

  @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)
列表< Product> pro = q.getResultList();
return pro;
}


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'%') ?

解决方案

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

这篇关于如何使用“%”正确转换JPQL查询的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆