Spring CrudRepository findByInventoryIds(List <Long> inventoryIdList) – 相当于IN子句

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

findByInventoryIds(List<Long> inventoryIdList) 

如果这种支持不可用,可以考虑哪些优雅的选项? 为每个ID触发查询可能不是最佳的。

3 Solutions collect form web for “Spring CrudRepository findByInventoryIds(List <Long> inventoryIdList) – 相当于IN子句”

findByInventoryIdIn(List<Long> inventoryIdList)应该做的伎俩。

HTTP请求参数格式将如下所示:

 Yes ?id=1,2,3 No ?id=1&id=2&id=3 

JPA存储库关键字的完整列表可以在当前文档列表中find 。 它表明IsIn是等价的 – 如果你喜欢动词的可读性,并且JPA也支持NotInIsNotIn

对于Spring CrudRepository中的任何方法,您应该能够自己指定@Query。 像这样的东西应该工作:

 @Query( "select o from MyObject o where inventoryId in :ids" ) List<MyObject> findByInventoryIds(@Param("ids") List<Long> inventoryIdList); 

是的,这是支持的。

请查看此处提供的文档以获取方法名称中的受支持关键字。

您可以在存储库接口中定义方法,而不使用@Query注释并编写自定义查询。 你的情况如下:

 List<Inventory> findByIdIn(List<Long> ids); 

我假设你有Inventory实体和InventoryRepository接口。 你的情况下的代码应该是这样的:

实体

 @Entity public class Inventory implements Serializable { private static final long serialVersionUID = 1L; private Long id; // other fields // getters/setters } 

存储库

 @Repository @Transactional public interface InventoryRepository extends PagingAndSortingRepository<Inventory, Long> { List<Inventory> findByIdIn(List<Long> ids); } 
  • 如何通过Sort和Pageable使用Spring数据JPA来查询数据?
  • 如何在Spring Data中使用OrderBy和findAll
  • 禁用JSON中的超文本应用程序语言(HAL)?
  • Spring Data JPA通过embedded对象属性来查找
  • 使用@Query使用hibernate更新spring数据jpa中的布尔值
  • 在Spring Data REST中发布@OneToMany子资源关联
  • 不区分大小写使用Spring CrudRepository进行查询
  • 在Spring数据jpa中save和saveAndFlush之间的区别
  • Spring数据jpa-没有定义名为“entityManagerFactory”的bean; 注入自动装载的依赖关系失败
  • 如何在Spring数据中使用@Transactional?
  • 当使用getOne和findOne方法时,Spring Data JPA