将位置参数更改为 HQL 中的命名参数

change positional parameters to named parameters in HQL

我现在正在将hiberate升级到5,需要将所有位置参数(在5中删除)更改为命名参数。 我对如何在 "mutiple ? in in-clause" 中使用命名参数有疑问。 例如,我有一个查询

select people from users where grade in ( ?, ?, ?, ?.......

我不知道“?”的确切数字。在 HQL 查询中。使用位置参数,我可以简单地

   int index = 0;
   for(Grade g : GradeList) {
      query.setParameter(index++, g);
    }

所以"index"可以帮我动态生成HQL查询中的索引位置。如果我想用命名参数替换这个查询,我们通常怎么做呢? 我们做点什么吗

String s = "p";
int index = 0;
for(Grade g : GradeList) {
  String ss = s + index++;
  query.setParameter("ss", g);
}

那么我应该在“?”的查询中输入什么。 s1, s2, s3, s4???

如果您使用 org.hibernate.query.Query 那么

String queryString = "select people from users where grade IN (:grades)";
// Query query = session.createQuery (queryString);

query.setParameterList("grades", gradeList);

如果您使用的是 JPA,那么

query.setParameter("grades", gradeList);