标签:java jpa jpa-2-0 jpql objectdb
我无法让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();
返回值变量的空列表.
我错过了什么?这是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,jpa-2-0,jpql,objectdb 来源: https://codeday.me/bug/20190830/1768935.html
本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享; 2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关; 3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关; 4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除; 5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。