在Spring cruudrepository中,我们是否支持字段的“In子句”?是类似于下面的东西吗?
findByInventoryIds(List<Long> inventoryIdList)
如果没有这样的支持,那么可以考虑哪些优雅的选项呢?对每个id发起查询可能不是最佳的。
对于Spring CrudRepository中的任何方法,您都应该能够自己指定@Query。像这样的东西应该工作:
@Query( "select o from MyObject o where inventoryId in :ids" ) List<MyObject> findByInventoryIds(@Param("ids") List<Long> inventoryIdList);
findByInventoryIdIn(List<Long> inventoryIdList)应该做的把戏。
findByInventoryIdIn(List<Long> inventoryIdList)
HTTP请求参数格式如下:
Yes ?id=1,2,3 No ?id=1&id=2&id=3
JPA存储库关键字的完整列表可以在当前文档列表中找到。它表明IsIn是等效的——如果您更喜欢动词的可读性——并且JPA还支持NotIn和IsNotIn。
IsIn
NotIn
IsNotIn
是的,这是支持的。
检查文档在这里提供的方法名中支持的关键字。
您可以只在存储库接口中定义方法,而不使用@Query注释并编写自定义查询。在您的情况下,建议如下:
List<Inventory> findByIdIn(List<Long> ids);
我假设你有库存实体和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); }