【发布时间】:2014-10-14 16:24:28
【问题描述】:
我无法让 ObjectDB 根据其 ID 选择多个值。我的查询超级简单:
Query query = getEntityManager().createQuery("SELECT i FROM " + getEntityClass().getSimpleName() + " i WHERE i.id IN :ids", entityClass);
query.setParameter("ids", ids);
List<Object> values = query.getResultList();
但无论如何,这总是返回一个空列表。
ids 列表包含现有 id 的列表,所有这些都是 Long 对象。我对此进行了三重检查。
类似的查询:
entityManager.find(getEntityClass(), id);
...和...
Query query = entityManager.createQuery("SELECT i FROM " + getEntityClass().getSimpleName() + " i", entityClass);
...工作正常。
另外,如果我这样做: entityManager.find(getEntityClass(), 1L);
我得到了正确的结果:单个实例。
但是:
List<Long> ids = new LinkedList<Long>();
ids.add(1L);
Query query = getEntityManager().createQuery("SELECT i FROM " + getEntityClass().getSimpleName() + " i WHERE i.id IN :ids", entityClass);
query.setParameter("ids", ids);
List<Object> values = query.getResultList();
向values 变量返回一个空列表。
我错过了什么?这是 ObjectDB 不支持的吗?
谢谢!
【问题讨论】:
-
在 Hibernate/EclipseLink 中确实可以正常工作。我手头没有ObjectDB,也没有兴趣,但您可以尝试使用真正的
Set,或者将:ids包裹在括号内,如IN (:ids)。在大约 5 年前修复错误的旧 Hibernate 版本中也需要这样做。
标签: java jpa jpa-2.0 jpql objectdb