2017-04-26 449 views
1

我使用Spring数据JPA(目前1.11.3.RELEASE)与Hibernate(目前5.2.10.Final)作为JPA实现如何在Spring Data JPA中为自定义@Query提供并使用可变参数或Iterable参数?

我有以下情形的(简化)例如,先简单用户实体类别:

@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 
} 

这个解决方案是使用@Query in its modifying form春季数据JPA文档中很好的描述。

我的文档错过了什么是如何为varags或提供ID列表可迭代参数允许多个用户的失活一次我该怎么做?

回答

1

存在用户储存库在Spring数据JPA源代码这样库的比较示例UserRepository.java例如使用@Query这样的:

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

所以你可以提供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); 
相关问题