Java 如何在JPA中查找重复项?
我正试图在Crudepository中创建一个方法,该方法将能够在我的表中为我提供副本。我想找一个名字和生日相同的人。为此,我认为这更容易,我想首先找到所有相同的名字,然后我想过滤相同生日的名字。所希望的方法是一种规范,但也可以进行查询 JPA有办法吗 全表:Java 如何在JPA中查找重复项?,java,spring,jpa,spring-data-jpa,spring-data,Java,Spring,Jpa,Spring Data Jpa,Spring Data,我正试图在Crudepository中创建一个方法,该方法将能够在我的表中为我提供副本。我想找一个名字和生日相同的人。为此,我认为这更容易,我想首先找到所有相同的名字,然后我想过滤相同生日的名字。所希望的方法是一种规范,但也可以进行查询 JPA有办法吗 全表: ID Name Birthday 1 Jean 11.10.2019 2 Jones 10.10.2019 3 Jean 11.10.2019 4
ID Name Birthday
1 Jean 11.10.2019
2 Jones 10.10.2019
3 Jean 11.10.2019
4 Jean 12.10.2019
第一个结果,使用相同名称筛选:
ID Name Birthday
1 Jean 11.10.2019
3 Jean 11.10.2019
4 Jean 12.10.2019
第二个希望的结果是:
ID Name Birthday
1 Jean 11.10.2019
3 Jean 11.10.2019
因为吉恩的名字是在生日的同一天
有人能帮忙吗?使用Spring JPA标准 请参见第页的示例
因为您没有显示实体,所以我无法更明确地实现编码。您可以使用本机查询,如:
SELECT Name, Birthday, COUNT(*)
FROM Users
GROUP BY Name, Birthday
HAVING COUNT(*) > 1
这可以与连接一起使用,以获得所需的结果:
SELECT u.ID, u.Name, u.Birthday FROM Users u
JOIN (SELECT Name, Birthday, COUNT(*) FROM Users GROUP BY Name, Birthday HAVING COUNT(*) > 1) u2
ON u.Name=u2.Name AND u.Birthday=u2.Birthday
无内部联接的解决方案:
它为count添加一行“unknown”,而我的实体中没有该行。还有一个群组,这不是我要找的,正如你在上面看到的。我想列出所有结果。但是谢谢你的努力!您的结果是ID Name Birth unknown 1 Jean 11.10.2019 2可通过加入查询:从用户中选择u.姓名、u.生日u加入按姓名从用户组中选择姓名、生日、计数*,在u.Name=u2.Name和u.Birth=u2.BirthdayOk上有计数*>1 u2的生日。如果您不需要加入字段:从用户u选择u.ID、u.Name、u.Birthday,从用户组按名称选择Name、Birthday、COUNT*,Birthday HAVING COUNT*>1 u2,其中u.Name=u2.Name和u.Birthday=u2.BirthdayAxive为您提供了解决问题所需的所有信息,尽管他没有提供解决方案。只需从表中选择正确的列,使其适合您的实体。我知道这些链接,但没有这种情况的示例。感谢大家。看看这篇文章:你可以在你的存储库methodnope中添加一个本地查询,它会给我两次名字和生日。我的名字生日名字生日
SELECT u.ID, u.Name, u.Birthday
FROM Users u, (SELECT Name, Birthday, COUNT(*) FROM Users GROUP BY Name, Birthday HAVING COUNT(*) > 1) u2
WHERE u.Name = u2.Name AND u.Birthday = u2.Birthday