【发布时间】:2016-04-15 14:26:33
【问题描述】:
使用 Spring-data 时,可以扩展 CrudRepository。
这个 Repositories .delete() 方法是如何“在后台”工作的?
另外,这个方法是Transactional吗?如果是这样的话,在使用Spring-data的时候是否需要使用@Transactional注解。
例如这里需要@Transactional 吗? :
扩展 CrudRepository:
public interface PersonRepository extends CrudRepository<Person, Integer> {
}
在服务类中使用删除方法:
@Transactional
public void deletePerson(Person person) {
personRepository.delete(person);
}
编辑:@Transactional 在这里如何工作?
@Transactional
public void deletePersonAndTable(Person person, Table table) {
personRepository.delete(person);
tableRepository.delete(Table);
}
【问题讨论】:
-
定义“扩展 CrudRepository”。您的示例代码正是这样做的;不?对数据库进行任何操作都需要一个事务,因此这里不需要
@Transactional注释 - 需要将多个 DAO 操作分组到一个事务中。 -
您是否尝试删除
@Transactional并查看事务是否已提交? -
@BoristheSpider 只是展示我的存储库如何扩展 CrudRepository?您能否定义您的意思:“需要将多个 DAO 操作分组到单个事务中”?谢谢
-
如果在您的方法中删除有多个数据库访问,它需要是事务性的,因此添加注释事务性是有意义的。因此,如果存在级联,例如:当您删除一个人时,涉及多个需要使用注释 Transactional 进行事务处理的表
-
@Mr_Thorynque 我不确定你的意思?你能在Answer中举个例子吗?
标签: java spring spring-data crud transactional