【发布时间】:2023-03-13 01:29:01
【问题描述】:
我有以下课程:
public interface GarageRepository extends PagingAndSortingRepository<Garage, Integer> {}
public class GarageBO {
private GarageRepository garageRepository;
public void updateGarage(Garage garage) {
try {
garageRepository.save(garage);
} catch (Exception e) {
throw BoozinaExceptions.getCodeException(garage, e);
}
}
}
public class GarageFacade implements GarageService {
private GarageBO garageBO;
@Transactional
public void updateGarage(Garage garage) {
garageBO.updateGarage(garage);
}
}
假设我正在尝试更新车库并且引发了独特的违规行为。
当我使用 @Transactional 注释从 GarageFacade 调用 updateGarage 时,garageRepository 不会引发任何异常。
当我在没有 @Transactional 注释的情况下调用相同的方法时,garageRepository 会抛出唯一的违规异常,现在我可以使用 BoozinaExceptions.getCodeException(garage, e) 转换异常;
发生这种行为是因为当我有@Transactional 注释时,Spring jpa 数据执行提交时将引发异常。这发生在 GarageBO.updateGarage 执行 ok 之后?
但我需要转换唯一违规。我该怎么做?
提交后如何处理spring异常然后转换为我的异常?
【问题讨论】:
-
当车库实体不存在并且我尝试保存它时,catch 块被执行并且我可以转换异常。但是当车库实体已经存在时,catch 块不会被执行,并且休眠日志中会出现这一行:HHH000010: On release of batch it still contains JDBC statements
标签: spring hibernate jpa spring-data-jpa