findAllByHashIn(Collection<Long> hashes);
Я никогда раньше не использовал Iterable
в качестве параметра для пользовательского метода репозитория JPA, но я бы перевел имя findAllByHash
как "взять единственное хеш-значение и найти все записи, имеющие это значение "и подпись будет findAllByHash(Long hash)
.
Ваша мотивация немного отличается: вы хотите, чтобы все хеши использовались во время поиска. Согласно этой таблице ,
Keyword | Sample | JPQL snippet
In | findByAgeIn(Collection<Age> ages) | … where x.age in ?1
Spring JPA поддерживает логический IN
и принимает подкласс Collection
, поэтому это может быть
findAllByHashIn(Collection<Long> hashes);
findAllByHashIn(List<Long> hashes);
Обновление
Из любопытства я написал собственный Iterable
, который не Collection
, чтобы увидеть сбой метода. Как и ожидалось, весной бросил
IllegalArgumentException: значение параметра XXX не соответствует ожидаемому типу [java.lang.Long (n / a)].
Хотя он ожидает параметр Long
, он хорошо работает с Collection
(я использовал Arrays.asList(1L, 2L)
), но выполняет глупый запрос SQL:
... from XXX XXX0_ where XXX0_.hash=(? , ?)
binding parameter [1] as [BIGINT] - [1]
binding parameter [2] as [BIGINT] - [2]
При findAllByHashIn
добавляется IN
и запрос выглядит хорошо:
... from XXX XXX0_ where XXX.hash in (? , ?)
binding parameter [1] as [BIGINT] - [1]
binding parameter [2] as [BIGINT] - [2]