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

如何在Spring Data JPA中提供和使用varargs或Iterable参数用于自定义@Query?

闻人修平
2023-03-14

我使用Spring数据JPA(目前是1.11.3.RELEASE)和Hibernate(目前是5.2.10.Final)作为JPA实现

我将以下场景作为(简化的)示例,首先是一个简单的用户实体类:

@Entity
public class User {

@Id
private Long id;

private boolean active;

// getters/setters (not shown)

}

使用基于CRUD的用户存储库。此用户存储库应提供停用由其id标识的用户的方法:

public interface UserRepository extends CrudRepository<User, Long> {

// deactivate single user
@Modifying
@Query("UPDATE User u SET active = false WHERE u.id = ?1")
void deactivate(Long id);

// TODO how to provide a deactivateAll method
}

Spring Data JPA文档以@Query的修改形式对该解决方案进行了详细描述。

我在文档中遗漏的是如何提供ID列表作为varags或Iterable参数,以允许同时停用多个用户。我该怎么做?

共有1个答案

汝臻
2023-03-14

在Spring Data JPA源代码存储库中有一个类似的用户存储库这样做的例子:UserRepository。java,比如像这样使用@Query:

@Query("select u from User u where u.id in :ids")
Collection<User> findByIdsCustomWithNamedVarArgs(@Param("ids") Integer... ids);

因此,您可以使用varargs或Iterable提供ID列表

@Modifying
@Query("UPDATE User u SET active = false WHERE u.id IN :ids")
void deactivateAll(@Param("ids") Long... ids);

@Modifying
@Query("UPDATE User u SET active = false WHERE u.id IN :ids")
void deactivateAll(@Param("ids") Iterable<Long> ids);
 类似资料:
  • 我已经使用推土机现场级映射实现了带有静态自定义转换器参数的自定义转换器。但在我的情况下,自定义转换器参数将随时更改,我需要动态传递它们。 XML字段级推土机映射:

  • 问题内容: 我有一个C#/ Selenium / Specflow测试套件,正在使用xunit.console.exe使用Jenkins运行。我需要将这些测试指向不同的环境(Test / QA / Prod等),并想使用命令行参数。 我正在调用的批处理命令是: 并希望包含一个额外的参数,例如: “ -env = PROD”, 以将该作业指向特定的环境。 我愿意采取更好的方法。 问题答案: 对于此解

  • 假设我们有以下方法。 如何使用这两个参数创建单个IntStream? 它似乎很冗长。我们有什么简明的成语吗?

  • 我正在使用Symfony Security和系统中的自定义用户提供程序。它通过web服务为用户提供服务。 我根据本教程配置提供程序(http://symfony.com/doc/current/cookbook/security/custom_provider.html). 这里是检查用户的功能: 这很好,函数使用用户名调用一个web服务,然后返回一个包含用户数据的数组。但是现在我需要通过另一个w

  • 我有一个Laravel5.4应用程序,在其中我必须通过外部API验证我的管理员用户,当成功登录时,它会返回一个包含用户信息的JSON。 我正在创建一个自定义保护,使此: 这是我的定制提供商: 在那之后,我不知道如何继续。我读过一些教程,比如George Buckingham的教程,我创建了一个自定义用户提供程序(现在我只需要它从EloquentUserProvider扩展,最终我将覆盖一些函数以连

  • 我正在使用IText7从html字符串生成pdf。现在,我需要对段落应用自定义颜色和自定义字体或字体系列。 如何使用Itext7实现这一点? 谢谢