Spring @transactional 在存储库中不起作用
Posted
技术标签:
【中文标题】Spring @transactional 在存储库中不起作用【英文标题】:Spring @transactional does not work in repository 【发布时间】: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()
之后的结果值。
【问题讨论】:
***.com/questions/3886909/… ,也许你在一个服务方法中有几个 dao 调用 【参考方案1】:我已经解决了我的 Lock 问题:
some method()
locker.lock()
try (Connection connection = sql2o.beginTransaction())
do some execute..
connection.commit()
finaly locker.unlock()
【讨论】:
以上是关于Spring @transactional 在存储库中不起作用的主要内容,如果未能解决你的问题,请参考以下文章
Spring 数据和 mongodb - 在 @Transactional 中使用 spring 进行简单回滚
Spring @Transactional 和 Spring @Lock 注解有啥关系?
具有@async超时值的Spring @transactional不起作用
Spring @Transactional 对服务和非服务方法的不同行为?