gpt4 book ai didi

java - 使用 JPA 和 ObjectDB 按 id 选择多个对象?

转载 作者:塔克拉玛干 更新时间:2023-11-02 07:46:18 26 4
gpt4 key购买 nike

我无法让 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 列表包含现有 ids 的列表,都是 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 作为输出,请尝试检查您的应用程序中有什么不同。

关于java - 使用 JPA 和 ObjectDB 按 id 选择多个对象?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25419502/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com