我在spring boot应用程序中编写了一个函数,如下所示:
@Component
public class AspectHelper {
private final MyRepository myRepository;
public AspectHelper(
MyRepository myRepository) {
this.myRepository = myRepository;
}
@Async
public void save(MyEntity entity) {
try {
myRepository.save(entity);
Optional<MyEntity> savedEntityOpt = myRepository.findById(entity.id);
...
} catch (Exception e) {
log.error("Error occurred while saving", e);
}
}
}
上面的函数是从流中不在任何事务中的另一个bean调用的。
问题是,在db中保存实体后,我能够立即获得有效的实体id,而在尝试获取相同的实体时,我得到的是准确保存的实体。
但在检查数据库时,我找不到实体。
我不知道为什么会这样。有人能帮忙吗?
1条答案
按热度按时间t40tm48m1#
我打赌您使用的是可重复读取隔离级别,这是mysql的默认级别。在这种情况下,您必须了解,连接将只看到在事务开始之前提交的数据。尝试在sql编辑器中使用“自动提交”和/或切换为“读取已提交”