当前位置: 首页 > 工具软件 > ObjectDB > 使用案例 >

java em id_java – 使用JPA和ObjectDB通过id选择多个对象?

洪景铄
2023-12-01

我无法让ObjectDB根据其ID选择多个值.我的查询非常简单:

Query query = getEntityManager().createQuery("SELECT i FROM " + getEntityClass().getSimpleName() + " i WHERE i.id IN :ids", entityClass);

query.setParameter("ids", ids);

List 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 ids = new LinkedList();

ids.add(1L);

Query query = getEntityManager().createQuery("SELECT i FROM " + getEntityClass().getSimpleName() + " i WHERE i.id IN :ids", entityClass);

query.setParameter("ids", ids);

List values = query.getResultList();

返回值变量的空列表.

我错过了什么?这是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 ids = new LinkedList();

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,jpa-2-0,jpql,objectdb

来源: https://codeday.me/bug/20190830/1768935.html

 类似资料: