l00*_*0tr 4 java spring-data-jpa
我使用 Spring Data JPA(当前为 1.11.3.RELEASE)和 Hibernate(当前为 5.2.10.Final)作为 JPA 实现
我有以下场景作为(简化的)示例,首先是一个简单的 User 实体类:
@Entity
public class User {
@Id
private Long id;
private boolean active;
// getters/setters (not shown)
}
Run Code Online (Sandbox Code Playgroud)
具有基于 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
}
Run Code Online (Sandbox Code Playgroud)
Spring Data JPA 文档中使用@Query 的修改形式很好地描述了该解决方案。
我在文档中错过的是如何提供 ids 列表作为 varags 或 Iterable 参数以允许同时停用多个用户。我怎样才能做到这一点?
Spring Data JPA 源代码存储库中有一个类似的用户存储库示例:UserRepository.java,例如使用 @Query,如下所示:
@Query("select u from User u where u.id in :ids")
Collection<User> findByIdsCustomWithNamedVarArgs(@Param("ids") Integer... ids);
Run Code Online (Sandbox Code Playgroud)
因此,您可以使用 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);
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
3797 次 |
| 最近记录: |