Как найти дубликаты в JPA? - PullRequest
1 голос
/ 23 января 2020

Я пытаюсь создать метод в CrudRepository, который сможет давать мне дубликаты в моей таблице. Я хочу найти человека с таким же именем и в день рождения в тот же день. Для этого я думаю, что это проще, я хочу сначала найти все те же имена, а затем я хочу фильтровать имена с тем же днем ​​рождения. Желаемый метод - это спецификация, но возможны и запросы.

Есть ли способ в 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 

Потому что у имени «Жан» день рождения в один день.

Кто-нибудь может помочь?

Ответы [ 2 ]

2 голосов
/ 23 января 2020

Вы можете использовать собственный запрос, например:

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
0 голосов
/ 23 января 2020

Используйте Spring JPA Критерии

См. Пример на https://spring.io/blog/2011/04/26/advanced-spring-data-jpa-specifications-and-querydsl/

https://www.baeldung.com/spring-data-criteria-queries

Поскольку вы этого не сделали показать свою сущность, поэтому я не могу реализовать кодирование более явно.

...