在EJB-QL中我试图创建一个这样的查询:
SELECT *
FROM table
WHERE id IN ([id1],[id2],[id3],...);
这是对oracle或mysql的正常查询,但是如何将EJB-QL设置参数作为列表?
SELECT o
FROM ClassName
WHERE ClassNameId IN (List<Long> listOfIds);
有办法做到这一点吗?
更重要的是,这比为列表中的每个id运行单独的查询更有效吗?
任何建议都将不胜感激。
编辑:为了清楚起见,我试图运行一个查询,根据一个id列表返回多行(不是整个表,不是另一个表的内容,而是一个任意的id列表)。我希望能够运行此查询一次,而不是多次运行常规查找查询(对于列表中的每个ID一次)。
谢谢,
吉姆
答案 0 :(得分:2)
String queryStr = "select o from ClassName o where o.classNameId IN :ids";
Query query = entityManager.createQuery("queryStr");
List<Long> listOfIds = getIds();
query.setParameter("ids", listOfIds);
List<ClassName> classNameList = (List<ClassName>) query.getResultList();
答案 1 :(得分:0)
我不是EJB-QL的专家。您可能会发现here中的示例很有用。
SELECT OBJECT (o) FROM Order AS o IN (o.lineItems) li
WHERE li.quantity = ?1