Spring CrudRepository findByInventoryIds(List <long> inventoryIdList) - 相当于IN子句</long>

时间:2013-09-24 16:37:02

标签: java spring jpa spring-data spring-data-jpa

在Spring CrudRepository中,我们是否支持字段的“IN子句”?即类似于以下内容?

 findByInventoryIds(List<Long> inventoryIdList) 

如果没有此类支持,可以考虑哪些优雅的选择?针对每个id激发查询可能不是最佳的。

3 个答案:

答案 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也支持NotInIsNotIn

答案 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);