JPQL查询 - 一个列表中的对象,而不是另一个列表中的对象

时间:2014-12-30 13:39:29

标签: sql jpa jpql

我想找到第一个列表中存在的实体列表,如果它们存在于第二个列表中,则拒绝实体 示例数据:
我有产品:P1,P2和P3。另一个(主要)实体是Items:I1和I2。 I1实体包含P1,P2和I2包含P2和P3。我想查找项目列表,如果它们出现在List1中(仅包含P1)并拒绝每个项目,如果它出现在List2中(仅包含P3)。所以它应该给我I1作为输出 我的查询和代码:

Query query = this.em.createQuery("SELECT distinct(i) FROM Item i join fetch i.products ip WHERE ip.product IN :list1 AND ip.product NOT IN :list2");
    query.setParameter("list1", list1);
    query.setParameter("list2", list2);

此查询为我提供了两个项目的列表。这里有什么问题?

1 个答案:

答案 0 :(得分:1)

试试这个

SELECT distinct i FROM Item i join fetch i.products ip WHERE :list1 IN ip and :list2 NOT IN ip

<强>更新

我一直试图让自己开始工作,但没有结果。 @NeilStockton建议在JPA规范中不支持它。

但是,在您的示例中,您有一个元素的参数列表。如果是单个元素参数,这应该有效:

Query query = this.em.createQuery("SELECT distinct i FROM Item i join fetch i.products ip WHERE :param1 IN elements(ip) and :param2 NOT IN elements(ip)");

query.setParameter("param1", product1);
query.setParameter("param2", product2);