Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/spring/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如何在JPA中查找重复项?_Java_Spring_Jpa_Spring Data Jpa_Spring Data - Fatal编程技术网

Java 如何在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

我正试图在Crudepository中创建一个方法,该方法将能够在我的表中为我提供副本。我想找一个名字和生日相同的人。为此,我认为这更容易,我想首先找到所有相同的名字,然后我想过滤相同生日的名字。所希望的方法是一种规范,但也可以进行查询

JPA有办法吗

全表:

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