我想找到第一个列表中存在的实体列表,如果它们存在于第二个列表中,则拒绝实体
示例数据:
我有产品: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);
此查询为我提供了两个项目的列表。这里有什么问题?
答案 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);