【问题标题】:Spring @transactional does not work in repositorySpring @transactional 在存储库中不起作用
【发布时间】:2019-10-21 04:11:13
【问题描述】:

我有一个简单的存储库,用@Transactional 注释。对于 ORM 实现,我使用的是 SQL2O。

我有非常具体的查询,在一种方法中,我在事务DELETE 然后UPDATE 然后commit() 在所有通过SELECT 查询检索数据后执行。所以问题是在某些情况下它返回错误的结果值。我的意思是最后插入的数据不在结果值中,因为它尚未提交。

Repository 类中的方法示例:

@Transactional
@Repository
@Slf4j
public class WishListRepositoryImpl implements WishListRepository {

    @Autowired
    private Sql2o sql2o;

    @Override
    public LinkedHashSet<String> deleteThenUpdateAndReturnFavorites(final String delete, final String update,
                                                                    final String crmId) {
        try (Connection connection = sql2o.beginTransaction()) {
            connection.createQuery(DELETE_FAVORITES_QUERY)
                    .addParameter(MATERIALS_JSON, delete)
                    .addParameter(CRM_ID, crmId)
                    .executeUpdate();
            connection.createQuery(ADD_NEW_FAVORITES_QUERY)
                    .addParameter(MATERIALS_JSON, update)
                    .addParameter(CRM_ID, crmId)
                    .executeUpdate();
            connection.commit();
            return new LinkedHashSet<>(connection.createQuery(FIND_ALL_CLIENT_FAVORITES_QUERY)
                    .addParameter(CRM_ID, crmId)
                    .executeAndFetch(String.class));
        }
    }

我需要在一个事务中成功commit() 之后的结果值。

【问题讨论】:

标签: spring-boot transactions


【解决方案1】:

我已经解决了我的 Lock 问题:

  some method(){
    locker.lock()
    try (Connection connection = sql2o.beginTransaction()) {
            do some execute..
            connection.commit()
        } finaly{ locker.unlock()}
    }

【讨论】:

    猜你喜欢
    • 2012-04-18
    • 1970-01-01
    • 1970-01-01
    • 2015-04-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-07-14
    相关资源
    最近更新 更多