在Spring CrudRepository中,我们是否支持字段的“IN子句”?ie类似以下的东西?
findByInventoryIds(List<Long> inventoryIdList)
如果没有这种支持,可以考虑哪些优雅的选择?对每个id执行查询可能不是最佳的。
是的,这是支持的。
检查此处提供的留档,以获取方法名称中支持的关键字。
您只需在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);
}
对于Spring CrudRepository中的任何方法,您都应该能够自己指定@Query。这样的东西应该工作:
@Query( "select o from MyObject o where inventoryId in :ids" )
List<MyObject> findByInventoryIds(@Param("ids") List<Long> inventoryIdList);
findByInventoryIdIn(列表
HTTP请求参数格式如下所示:
Yes ?id=1,2,3
No ?id=1&id=2&id=3
JPA存储库关键字的完整列表可以在当前文档列表中找到。它表明
IsIn
是等价的——如果你更喜欢动词的可读性——而且JPA还支持NotIn
和IsNotIn
。
问题内容: 这个问题已经在这里有了答案 : 等于(=)和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做与第一种方法类似的操作? 问题答案: 或更短: