在语句中的querybuilder中传递一个数组

时间:2015-02-27 09:52:10

标签: java hibernate jpa

我正在使用查询构建器在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();

这不起作用。它抛出异常。有人可以指出我该怎么做。

2 个答案:

答案 0 :(得分:0)

使用setParameterList("xyzList", new String []{"a","b","c"});

因此,如果您有该列表,则可以list.toArray()代替新的String []{"a","b","c"}

答案 1 :(得分:0)

entityManager.createNativeQueryentityManager.createNamedQuery

似乎弄错了entityManager.createQuery

您的查询语法是JPQL,但您可以将其编译为本机查询语法

对你有用的是从createNativeQuery简单地移动到createQuery,或者反过来调整它,所以如果这是你的目标,请写一个正确的原生查询。

请注意,如果您的意图是寻求原生查询,则应远离命名参数。在你的情况下它会工作,因为你使用hibernate作为持久性提供程序,但是否则,根据JPA规范不支持本机查询中的命名参数