我无法让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();
但是无论如何,这总是返回一个空列表。
ID列表包含所有现有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不支持的东西吗?
谢谢!
最佳答案
它应该工作。请尝试以下简单测试:
import java.util.*;
import javax.persistence.*;
public class TestInIds {
public static void main(String[] args) {
EntityManagerFactory emf =
Persistence.createEntityManagerFactory(
"objectdb:$objectdb/db/test.tmp;drop");
EntityManager em = emf.createEntityManager();
em.getTransaction().begin();
em.persist(new MyEntity());
em.persist(new MyEntity());
em.getTransaction().commit();
Query query = em.createQuery("SELECT e FROM MyEntity e WHERE e.id in :ids");
List<Long> ids = new LinkedList<Long>();
ids.add(1L);
query.setParameter("ids", ids);
List resultList = query.getResultList();
System.out.println("result size: " + resultList.size());
em.close();
emf.close();
}
@Entity
static class MyEntity {
@Id @GeneratedValue
private Long id;
}
}
它应该打印1。如果不尝试使用最新的ObjectDB版本。
如果确实得到1作为输出,请尝试检查应用程序中的不同之处。