spring的数据:“删除”支持?

我正在使用Spring JPA进行数据库访问。 我能find例如findByName和countByName,为此我不必写任何方法的实现。 我希望find一些基于某些条件删除一组logging的例子。

Spring JPA是否支持deleteByName-like删除? 任何指针表示赞赏。

问候和感谢。

弃用答案(Spring Data JPA <= 1.6.x)

@Modifying注释来拯救。 您将需要提供您的自定义SQL行为。

 @Transactional(readOnly = true) public interface UserRepository extends JpaRepository<User, Long> { @Modifying @Transactional @Query("delete from User u where u.firstName = ?1") void deleteUsersByFirstName(String firstName); } 

更新:

在现代版本的Spring Data JPA(> = 1.7.x)查询派生中, deleteremovecount操作是可访问的。

 public interface UserRepository extends CrudRepository<User, Long> { Long countByFirstName(String firstName); @Transactional Long deleteByFirstName(String firstName); @Transactional List<User> removeByFirstName(String firstName); } 

Spring Data JPA的版本1.6.0.RC1支持使用给定方法名称的删除查询的派生。 支持removedelete关键字。 作为返回值,可以在数字或删除的实体列表之间进行select。

 Long removeByLastname(String lastname); List<User> deleteByLastname(String lastname); 

如果你看一下Spring Data JPA的源代码,特别是PartTreeJpaQuery类,你会发现它试图实例化PartTree 。 在那个类里面有下面的正则expression式

private static final Pattern PREFIX_TEMPLATE = Pattern.compile("^(find|read|get|count|query)(\\p{Lu}.*?)??By")

应该指出什么是允许的,什么不是。

当然,如果你尝试添加这样一个方法,你会发现这是行不通的,你会得到完整的栈跟踪。

我应该注意到,我正在使用Spring Data JPA的1.5.0.RELEASE版本