Spring CrudRepository findByInventoryIds(List inventoryIdList) - equivalent to IN clause

后端 未结 3 575
执念已碎
执念已碎 2020-11-29 17:35

In Spring CrudRepository, do we have support for \"IN clause\" for a field? ie something similar to the following?

 findByInventoryIds(List inve         


        
相关标签:
3条回答
  • 2020-11-29 17:49

    findByInventoryIdIn(List<Long> inventoryIdList) should do the trick.

    The HTTP request parameter format would be like so:

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

    The complete list of JPA repository keywords can be found in the current documentation listing. It shows that IsIn is equivalent – if you prefer the verb for readability – and that JPA also supports NotIn and IsNotIn.

    0 讨论(0)
  • 2020-11-29 18:03

    For any method in a Spring CrudRepository you should be able to specify the @Query yourself. Something like this should work:

    @Query( "select o from MyObject o where inventoryId in :ids" )
    List<MyObject> findByInventoryIds(@Param("ids") List<Long> inventoryIdList);
    
    0 讨论(0)
  • 2020-11-29 18:05

    Yes, that is supported.

    Check the documentation provided here for the supported keywords inside method names.

    You can just define the method in the repository interface without using the @Query annotation and writing your custom query. In your case it would be as followed:

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

    I assume that you have the Inventory entity and the InventoryRepository interface. The code in your case should look like this:

    The Entity

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

    The Repository

    @Repository
    @Transactional
    public interface InventoryRepository extends PagingAndSortingRepository<Inventory, Long> {
    
      List<Inventory> findByIdIn(List<Long> ids);
    
    }
    
    0 讨论(0)
提交回复
热议问题