当前位置: 首页 > 知识库问答 >
问题:

Spring CrudRepository findByInventoryIds(ListInventoryIdList)-等同于IN子句

公孙宇
2023-03-14

在Spring CrudRepository中,我们是否支持字段的“IN子句”?ie类似以下的东西?

 findByInventoryIds(List<Long> inventoryIdList) 

如果没有这种支持,可以考虑哪些优雅的选择?对每个id执行查询可能不是最佳的。

共有3个答案

杭曦
2023-03-14

是的,这是支持的。

检查此处提供的留档,以获取方法名称中支持的关键字。

您只需在repository界面中定义方法,无需使用@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);

}
裘嘉树
2023-03-14

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

@Query( "select o from MyObject o where inventoryId in :ids" )
List<MyObject> findByInventoryIds(@Param("ids") List<Long> inventoryIdList);
汪文光
2023-03-14

findByInventoryIdIn(列表

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

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

JPA存储库关键字的完整列表可以在当前文档列表中找到。它表明IsIn是等价的——如果你更喜欢动词的可读性——而且JPA还支持NotInIsNotIn

 类似资料:
  • 问题内容: 这个问题已经在这里有了答案 : 等于(=)和IN的性能差异(带一个文字值) (7个答案) 2年前关闭。 这是一个非常简单的问题,我假设答案是“没关系”,但无论如何我都必须问… 我有一个用PHP构建的通用sql语句: 假设进行了先期有效性检查(一个数组至少包含1个项目且所有数值都是),我应该改为执行以下操作吗? 还是检查的开销不值得在实际的sql语句中保存(如果有的话)? 问题答案: 两

  • 对于那些使用Firebase(FiRecovery)的人来说,您可以拥有一个包含文档的集合,其中每个文档都有一个id,然后一个集合可以保存一个子集合(相当于嵌入文档作为文档数组作为属性)。 然后,这个子集合可以容纳许多文档,而每个文档都有一个id。 在Firestore中,子集合是延迟加载的。 它将获取该集合上的文档,但如果有一个或多个子集合,它将不会检索该集合,除非特别转到该路径。e、 g:集合

  • 问题内容: 在PHP中可以做到。在JavaScript中,您通常会使用相同的方法,但这并不完全相同。如果确实存在,但条件是或(或可能还有其他值),则条件也将评估为false 。 JavaScript 中PHP的完美替代品是什么? 从更广泛的意义上讲,有关JavaScript处理不存在的变量,没有值的变量等的通用完整指南会很方便。 问题答案: 我通常使用运算符: 如果该属性不存在或其值是,它将返回。

  • 问题内容: 我正在寻找一种等效于C / PHP 或C#/ Java程序员(适用于.NET)的JavaScript 。 我的基本要求是现在使用数字的千位分隔符格式,但是可以处理很多组合(包括日期)的东西会很好。 我意识到Microsoft的Ajax库提供了的版本,但我们不希望该框架的全部开销。 问题答案: 从ES6开始,您可以使用模板字符串: 除此以外: 尝试sprintf()for JavaScr

  • 问题内容: 我在Windows Server 2008上使用SQL Server 2008 Enterprise。我想从前11位到前20位选择结果(例如,我只对第11位到第20位结果感兴趣)。任何想法如何有效地在tsql中编写此查询? 在此先感谢,乔治 问题答案: 不幸的是,SQL Server没有提供类似于MySQL语法的任何东西。但是,您可能想要尝试使用派生表,如下所示:

  • 问题内容: 这是执行字符串替换的两种方法: 如何使用Java做与第一种方法类似的操作? 问题答案: 或更短: