我正在使用查询构建器在hibernate中创建查询语句。我需要为in语句传递一个arrayList。如何才能做到这一点。 虚拟代码:
List<String> xyz = new ArrayList<String>("sam","tam","vam");
StringBuilder queryBuilder = new StringBuilder("select abc from tem where xyz in :xyzList");
Query query = entityManager.createNativeQuery(queryBuilder.toString());
query.setParameter("xyzList", xyz);
query.getResultList();
这不起作用。它抛出异常。有人可以指出我该怎么做。
答案 0 :(得分:0)
使用setParameterList("xyzList", new String []{"a","b","c"});
因此,如果您有该列表,则可以list.toArray()
代替新的String []{"a","b","c"}
答案 1 :(得分:0)
entityManager.createNativeQuery
或entityManager.createNamedQuery
entityManager.createQuery
您的查询语法是JPQL,但您可以将其编译为本机查询语法
对你有用的是从createNativeQuery
简单地移动到createQuery
,或者反过来调整它,所以如果这是你的目标,请写一个正确的原生查询。
请注意,如果您的意图是寻求原生查询,则应远离命名参数。在你的情况下它会工作,因为你使用hibernate作为持久性提供程序,但是否则,根据JPA规范不支持本机查询中的命名参数