【问题标题】:How to filter A which has an List of entity B using JPA如何使用 JPA 过滤具有实体 B 列表的 A
【发布时间】:2021-04-01 19:48:35
【问题描述】:

所以我有三个实体

  1. 公司:
class Company{
         List<City> cities;
         List<Employ> employs;
}
  1. 城市:
class City{
        long id;
        String name;
}
  1. 雇用:
class Employ{
        long id;
        String name;
}

现在我必须过滤掉具有employ.name = x 和city.name = y 的公司,

我如何使用任何 JPQL 或 MySQL 的纯形式来做到这一点,

TIA

【问题讨论】:

    标签: mysql spring jpql


    【解决方案1】:

    这是一个JPQL 查询

     select c from Company c  
     where 
         not exists(select 1 from c.employs emp where emp.name=:name) and 
         not exists(select 1 from c.cities city where city.name=:cityName)
    

    【讨论】:

    • 这将为您提供公司但不希望它们过滤掉?
    • @Allan WindI 已编辑。我误解了这个问题
    • 我认为该查询根本行不通。由于子查询不相关,您要么得到所有行,要么根本没有。
    • @Allan WindI 查询必须有效。子查询通过相同的Company c 关联
    • 关联子查询意味着外部查询的表达式用于选择子查询的元素。您导航数据层次结构,也许这是正确的,但它不是关系。从问题中不清楚它是否应该是两个查询之间的“或”或“和”。我的回答假设或和你的和。
    【解决方案2】:

    类层次结构没有提及主键和外键,但您通常会使用公司中的主要 company_id 对其进行建模,而对于 1:n 关系,则在多 (n) 端使用 company_id 外键:

    select company_id from company
    where company_id not in (
      select company_id from city where name = :x
      union
      select company_id from employee where name = :y
    );
    

    【讨论】:

    • 它过滤掉 employ.name = x OR city.name = y 而不是 AND 的记录
    猜你喜欢
    • 2021-08-24
    • 2012-12-17
    • 2020-03-25
    • 2018-06-20
    • 1970-01-01
    • 1970-01-01
    • 2017-05-25
    • 2011-12-05
    • 1970-01-01
    相关资源
    最近更新 更多