我要保存实体。因此,我确实要保存(实体),并且在发生异常时,我尝试在删除()之后保存(实体)。
但是,由于显示了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
用户表是一个内存表,因此如果它已满,请删除它并再次保存。
答案 0 :(得分:0)
您应该使用rollbackFor
字段来定义在事务将在Throwable
上回滚时抛出RuntimeException
的一个或多个子类时应采取的措施,因此请对其进行定义通过以下方式:
@Transactional(rollbackFor = Throwable.class)