1 回答

TA贡献1794条经验 获得超8个赞
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看到方法失败。不出所料,Spring抛出
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]
添加回答
举报