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)查询派生中, delete
, remove
和count
操作是可访问的。
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支持使用给定方法名称的删除查询的派生。 支持remove
和delete
关键字。 作为返回值,可以在数字或删除的实体列表之间进行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
版本