在春天保持数据一致性

时间:2017-05-15 17:11:48

标签: java spring hibernate repository spring-data-jpa

我有一个场景,我必须将数据插入多个表。如果一个查询失败,那么我想回滚最后执行的查询

我的服务方法是

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

我想如果第一次插入执行并且第二次插入失败,那么第一次插入将回滚,如果第一次插入失败并且第二次插入执行,则第二次插入将回滚。

请建议我该怎么做。

2 个答案:

答案 0 :(得分:0)

我认为您正在使用Spring数据Jpa并在JpaRepositoryABCRepository中扩展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。它没有出现在您粘贴的代码段中,但过去我遇到了这个错误,这就是为什么我认为这就是原因。