在Spring CrudRepository中,我们是否支持字段的“IN子句”?即类似于以下内容?
findByInventoryIds(List<Long> inventoryIdList)
如果没有此类支持,可以考虑哪些优雅的选择?针对每个id激发查询可能不是最佳的。
答案 0 :(得分:217)
findByInventoryIdIn(List<Long> inventoryIdList)
应该可以解决问题。
HTTP请求参数格式如下:
Yes ?id=1,2,3
No ?id=1&id=2&id=3
可以在current documentation listing中找到JPA存储库关键字的完整列表。它表明IsIn
是等效的 - 如果您更喜欢动词的可读性 - 并且JPA也支持NotIn
和IsNotIn
。
答案 1 :(得分:82)
对于Spring CrudRepository中的任何方法,您应该能够自己指定@Query。这样的事情应该有效:
@Query( "select o from MyObject o where inventoryId in :ids" )
List<MyObject> findByInventoryIds(@Param("ids") List<Long> inventoryIdList);
答案 2 :(得分:3)
您可以使用关键字“In”并传递 List 参数。例如:findByInventoryIdIn
List<AttributeHistory> findByValueIn(List<String> values);