对象列表作为IN运算符的参数

时间:2014-08-13 13:09:45

标签: java hibernate

我正在将jpa提供程序从Eclipselink 2.4.2迁移到Hibernate 4.3.5。

我想传递一个对象列表作为IN运算符的参数。目前,我正在尝试使用List<UUID>,但它也失败了List<Class<?>>

我的查询如下:

SELECT e
FROM Entity e
WHERE e.uuid IN :uuids;

代码:

List<UUID> uuids = new ArrayList<UUID>();
uuids.add(UUID.fromString("..."));

Query query = session.createQuery(queryString);
query.setParameter("uuids", uuids);

List list = query.list(); // <-- fails here

List<UUID>的例外:

java.lang.ClassCastException: java.util.ArrayList cannot be cast to java.util.UUID

使用UUID[]

java.lang.ClassCastException: [Ljava.util.UUID; cannot be cast to java.util.UUID

Hibernate似乎没有正确理解这种列表。调试时,我可以看到QueryLoader使用了正确的描述符,但没有将其翻译为列表。

实际上,这与Eclipselink合作。我做错了什么?

1 个答案:

答案 0 :(得分:2)

我猜您正在使用query.setParameter(..)(而不是代码示例中所述的session.setParaemter(..)

对于命名查询的多个值,您应该使用setParameterList而不是setParameter

List<UUID> uuids = new ArrayList<UUID>();
uuids.add(UUID.fromString("..."));

Query query = session.createQuery(queryString);
// **This method setParameterList bind multiple values to a named query parameter.**
query.setParameterList("uuids", uuids);

List list = query.list();