我勒个去,参数不是这样传递的
你可以先判断List<String>的length(),然后再拼接参数:
StringBuffer jpql= new StringBuffer();
jpql.append("select e from Entity e where e.status in (");
for(int i=0;i<list.length();i++){
jpql.append(":status"+i+",");
}
if (!list.isEmpty()){
jpql.deleteCharAt(jpql.length()-1);
}
jpql.append(")");
得到相应的query之后再setParameter:
for(int i=0;i<list.lenght(); i++){
query.setParameter("status"+i, list.get(i));
}然后就去执行就可以了,注意jpql作为StringBuffer要.toString()
你可以先判断List<String>的length(),然后再拼接参数:
StringBuffer jpql= new StringBuffer();
jpql.append("select e from Entity e where e.status in (");
for(int i=0;i<list.length();i++){
jpql.append(":status"+i+",");
}
if (!list.isEmpty()){
jpql.deleteCharAt(jpql.length()-1);
}
jpql.append(")");
得到相应的query之后再setParameter:
for(int i=0;i<list.lenght(); i++){
query.setParameter("status"+i, list.get(i));
}然后就去执行就可以了,注意jpql作为StringBuffer要.toString()
"SELECT o FROM xx as o WHERE o.xx IN (");
jpql.append( StringUtils.repeat(" ? ", ",", listSize));
jpql.append(") ");Object[] queryParams= list.toArray();
Query query = entityManager.createQuery(jpql.toString);
if (queryParams != null && queryParams.length > 0)
{
for (int i = 0; i < queryParams.length; i++)
{
query.setParameter(i + 1, queryParams[i]);
}
}
return query.getResultList();
这句:
Query query = em.createQuery(“select * from Users where name in(?names)”);
query.setParameter(“name”, names);//names是一个name集合
应该改成:
Query query = em.createQuery(“select * from Users where name in(:names)”);//?改成:
query.setParameter(“names”, names);//name改成names,这样才对,否则jpa是无法把name map到names的
问题是,如果我传入一个String[] statusArr 或者List<String> 时,都报出异常。请问jpa里的in查询的到底怎么用? member 不能查,直接报 unexpect token
当然,如果实在没办法,我只能去用程序去拼接 in 的部分了。这是最下策了。