hibernate - SpringBoot @Transactional 在异常后不刷新会话
问题描述
我想保存实体。所以我确实保存(实体),当发生异常时,我尝试在删除()之后保存(实体)。
但是,由于don't flush the session after an exception
显示了语句并且没有执行异常查询,所以传播设置如下所示。
@Service
@RequiredArgsConstructor
@Transactional
public class UserService {
private final UserRepository userRepository;
@Transactional(TxType.SUPPORTS)
public String saveIfPossibleElseDeleteAndSave(final String name){
final User user = User.builder()
.age(0)
.name(name)
.gender(User.Gender.MAN)
.build();
try{
userRepository.save(user);
return "SAVE";
} catch(RuntimeException e){
userRepository.deleteOneLimit1();
userRepository.save(user);
return "DELETE AND SAVE";
}
}
}
以上就完成了。问题是,当该方法每秒执行多次时会出现问题吗?
另外,除了上面的代码,还有其他方法吗?
编辑
如果执行 save() 并发生错误,则打印语法。
java.sql.SQLException: The table 'users' is full
用户表是内存表,如果满了就删除再保存。
解决方案
您应该使用字段来定义如果在事务回滚时将抛出一个rollbackFor
或多个子类,您应该如何操作,因此通过以下方式定义它:Throwable
RuntimeException
@Transactional(rollbackFor = Throwable.class)
推荐阅读
- javascript - 有没有办法通过按键/按键事件检测突出显示的键替换?
- mysql - 这个 sql 语法有什么问题?
- html - 食物菜单列表自动分成 2 列
- javascript - 仅当用户使用选项卡时才设置元素的焦点
- javascript - 扫雷 - 角
- mongoose - 设置标头两次和/或未正确处理回调 - 导致错误 [ERR_HTTP_HEADERS_SENT]
- sharepoint - Sharepoint 列表未保存,出现“跳至主要内容”错误
- flutter - 如何加载因“无法加载资产:...”而失败的图像
- javascript - 如何修复 SCRIPT5007:无法在 Internet Explorer 11 中获取未定义或空引用的属性“parentNode”?
- git - GitLab CI:在 Vue.js 项目中找不到 npm 命令