Oracle Hibernate查询,两列上没有重复项

Oracle Hibernate查询,两列上没有重复项,oracle,hibernate,jpql,Oracle,Hibernate,Jpql,我有一个包含5列的表,如下所示: id, name, firstName, job, number 这个表中有许多记录。现在,想象一下这些记录: - 1 Konan toto doctor 45 - 2 Konan tata doctor 50 - 3 Konan toto doctor 60 - 4 simba popo police 44 - 5 simba tata police 88 - 6 pikar popo doctor 99 - 7 simba pop

我有一个包含5列的表,如下所示:

id, name, firstName, job, number
这个表中有许多记录。现在,想象一下这些记录:

 - 1 Konan toto doctor  45
 - 2 Konan tata doctor  50
 - 3 Konan toto doctor  60
 - 4 simba popo police  44
 - 5 simba tata police  88
 - 6 pikar popo doctor  99
 - 7 simba popo doctor  72
现在,我想找到唯一的记录,工作是医生,并得到记录没有重复的名字,名字 如果我们有许多同名+姓的记录,我们只返回一条记录,比如说任何人

结果将是

 - 1 Konan toto doctor  45
 - 2 Konan tata doctor  50
 - 6 pikar popo doctor  99
 - 7 simba popo doctor  72
id为3的记录被删除,因为name、firstName和其他记录上存在重复项,因为我们只需要job=doctor


什么是Hibernate查询以获得所需的结果?

我不确定为什么必须使用JPQL进行此操作,这似乎相当困难,并且生成一个可能需要自连接的低效查询。下面是一个相对简单的基于Oracle SQL的解决方案

选择 MAXid保持稠密_排名第一,按id作为id, 名称 名字, MAXjob保持稠密\u按id排名第一作为作业, MAXnumber保持稠密\u按id作为编号排名第一 从t WHERE job=‘医生’ 按姓名分组 使用窗口功能的更符合标准的解决方案:

选择 从…起 选择 身份证,姓名,名字,工作,号码, 按名称划分的分区上的行数,按id rn划分的firstName顺序 从t WHERE job=‘医生’ T 其中rn=1
这是一个特殊的情况。我建议使用本机查询,如果确实需要,您仍然可以将其映射到实体。

为什么必须使用JPQL进行此操作?使用SQL会相对容易…您也可以使用一个简单的group by和JPQL,从Person p中选择MAXp.id、p.name、p.firstName、MAXp.job、MAXp.number,其中p.job='doctor'group by p.name,p。firstName@ChristianBeikov:这将产生id和数字的随机组合,可能不会出现在源数据中您是对的,类似于选择p.id,p.name,p.firstName,MAXp.job,MAXp.number From Person p,其中p.id在选择MAXp2.id From Person p2 WHERE p2.job='doctor'组BY p.name,p.firstName可能更合适我同意卢卡斯的观点。您应该在SQL中而不是在JPQL中实现此查询。JPQL对于这些类型的查询来说功能不够强大,JPA被故意设计成一个漏洞百出的抽象。您可以使用来执行数据库支持的各种SQL语句:Query q=em.createNativeQueryEnter Lukas’Query here;