我正在将jpa provider从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一起使用的。我究竟做错了什么?
我猜您正在使用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();
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句