java - 如何在 JPA 中查找重复项?
问题描述
我正在尝试在 CrudRepository 中创建一个能够在我的表中为我提供重复项的方法。我想找到一个同名且生日当天的人。为此,我认为这更容易,我想首先找到所有相同的名字,然后我想过滤具有相同生日的名字。Wished Method 是一种规范,但也可以进行查询。
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
因为名字“Jean”在同一天生日。
有人可以帮忙吗?
解决方案
您可以使用本机查询,例如:
SELECT Name, Birthday, COUNT(*)
FROM Users
GROUP BY Name, Birthday
HAVING COUNT(*) > 1
这可以与 一起使用JOIN
以获得所需的结果:
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
没有的解决方案INNER JOIN
:
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
推荐阅读
- javascript - 从网络摄像头保存图像在本地主机上工作正常,但在服务器上不行
- flutter - 如何从飞镖中的字符串中获取双精度值?
- javascript - 如何在nodejs脚本中等待ioredis库的“设置”功能?(我认为回答者不需要知道ioredis。)
- python - 使用 xlsxwriter 的一系列单元格的单元格格式
- c# - “迁移”到 AndroidX 后由多个托管类型错误生成的 Java 类型
- java - android项目中不同的kotlin版本
- jmespath - JMESPath 将字符串转换为数字,然后过滤大于 0 得到“无效令牌(数字):“0””错误消息
- python - 无法从 powershell 运行行为命令,出现错误“术语'行为'未被识别为 cmdlet 的名称”
- python - 我正在尝试模拟用户登录 Chegg,但遇到访问被拒绝页面
- java - 使用 Mockito.when() 模拟和验证 vs mockito.verify