jpa使用jpql,在程序中使用jpql语句的in

来源:互联网 发布:python兼职网 编辑:程序博客网 时间:2024/05/16 19:34

在hibernnate中 通过指定的多个id查询多个实体的方法很简单,例如:

 

public List<T> getByIds(Integer [] ids) {
  //方法一

  //return getSession().createQuery("form" + clazz + " o where o.id in (:ids)") .setParameterList("ids", ids) .list();

  //方法二

  return getSession().createCriteria(clazz).add(Restrictions.in("id", ids)).list();

}

在hibernate中可以使用setsetParameterList()方法,如果使用jpa,而在jpa中没有setsetParameterList()方法,该怎么解决?例如

 

public List<T> getByIds(Integer [] ids) {
   // "select o from  Xxx o where o.id in (1,2,3,4,5,...)"
  StringBuilder stringBuilder = new StringBuilder();
  for (int i = 0; i < ids.length; i++) {
   stringBuilder.append("?").append(i + 1).append(",");
  }
  stringBuilder.deleteCharAt(stringBuilder.length() - 1);
  String jpql = "select o from " + getEntityName(clazz) + " o where o.id in (" + stringBuilder + ")";
  Query query = entityManager.createQuery(jpql);
  for (int i = 0; i < ids.length; i++) {
   query.setParameter(i + 1, ids[i]);
  }
  return query.getResultList();
 }

必须通过拼装jpql如果来实现这个功能