我有一个场景,我必须将数据插入多个表。如果一个查询失败,那么我想回滚最后执行的查询
我的服务方法是
@Service
@Transactional
public class ServiceNameImpl implements ServiceName{
@Autowired
private ABCRepository abcRepository;
@Autowired
private BCDRepository bcdRepository;
@Override
public SChResource save(SchData schData){
SchSch sch = new SchSch();
Contact con = new Contact();
sch.setName(schData.getName());
abcRepository.save(sch); --first insertion
con.setAddress(schData.getAddress());
bcdRepository.save(con); --second insertion
return null;
}
}
我想如果第一次插入执行并且第二次插入失败,那么第一次插入将回滚,如果第一次插入失败并且第二次插入执行,则第二次插入将回滚。
请建议我该怎么做。
答案 0 :(得分:0)
我认为您正在使用Spring数据Jpa并在JpaRepository
和ABCRepository
中扩展BCDRepository
或其超级或子级。
在这种情况下,您还需要在任何有@EnableTransactionManagement
的课程上添加@Configuration
。
答案 1 :(得分:0)
注意INFO [main] 2017-05-16 16:42:14,457 ColumnFamilyStore.java:405 - Initializing system_schema.aggregates
INFO [main] 2017-05-16 16:42:14,467 ColumnFamilyStore.java:405 - Initializing system_schema.indexes
INFO [main] 2017-05-16 16:42:14,468 ViewManager.java:139 - Not submitting build tasks for views in keyspace system_schema as storage service is not initialized
注释。您应该使用包@Transactional
,而不是org.springframework.transaction.annotation
。它没有出现在您粘贴的代码段中,但过去我遇到了这个错误,这就是为什么我认为这就是原因。