当前位置: 首页 > 知识库问答 >
问题:

如何在保存前进行验证并抛出检查异常

吕俊美
2023-03-14

我有以下情况:

    null

请注意,许多服务访问用户存储库,因此在保存之前直接实现新逻辑是很麻烦的。

为了在保存/更新之前执行验证,而不必为每个保存/更新调用显式实现验证,我尝试使用JPA侦听器。使用@prepersist@preupdate,我实现了在每次保存/更新之前执行验证的目标。但是,这种解决方案存在两个问题:

  • 检查的异常不会在保存/更新用户的方法上强制执行,并且异常会通过侦听器自动包装为runtimeexception
  • 当试图使用AOP捕获所述runtimeexception并解压缩原始检查的异常时,我不断地将org.springframework.Transaction.expectiontedrollbackexception:Transaction自动回滚,因为它已被标记为仅回滚

解决上面场景中描述的约束的好方法是什么?

共有1个答案

胡国兴
2023-03-14

通过修复org.springframework.Transaction.expectiontedrollbackException:事务自动回滚,因为它被标记为仅回滚错误,我找到了一个可行的解决方案。

问题是checked异常导致了意外的回滚,为了解决这个问题,我将自定义checked异常添加到可以回滚的异常中,如下所示:@transactional(rollbackFor={unacceptableStringValueException.class})

 类似资料:
  • 我试图在lambda内部抛出一个异常,但它总是给我一个错误,表示未处理的IOException。 有人能告诉我我做错了什么吗?

  • 在测试中,我使用的是mockobject: 我试图验证其方法的使用: 但它抛出以下异常: 组织。莫基托。例外情况。滥用。UnfinishedVerificationException:此处缺少验证(模拟)的方法调用: 这一行的例外点是: setMaxRows接受一个int。 当我注释掉这一行时,测试成功了。调试程序时,我可以看到正在设置的setMaxRows方法: BrandLabels是一个Li

  • 问题内容: 在为Java API编写单元测试时,可能需要在某些情况下执行更详细的异常验证。即比JUnit 提供的 @test 注释所提供的更多。 例如,考虑一个应该从其他接口捕获异常的类,包装该异常并抛出该包装的异常。您可能要验证: 引发包装异常的确切方法调用。 包装异常具有原始异常为其原因。 包装器异常的消息。 这里的要点是希望在单元测试中对异常进行额外的验证(而不是关于是否 应该 验证异常消息

  • 问题内容: 我正在重构一些代码以使用guava Cache。 初始代码: 为了不破坏某些内容,我需要按原样保留任何引发的异常,而不用包装它。 当前的解决方案看起来有些难看: 有什么办法可以使它变得更好? 问题答案: 刚写完问题,就开始考虑使用泛型的效用方法。然后想起了Throwables的一些东西。是的,它已经在那里!) 可能还需要处理UncheckedExecutionException甚至Ex

  • Java 8并行流在consuming子句中抛出异常时如何表现,例如在处理中?例如,以下代码: 它是否立即停止处理的元素?它是否等待已启动的元素完成?它是否等待所有的流完成?它是否在抛出异常后开始处理流元素? 什么时候回来?在异常之后立即?消费者处理完所有/部分元素后? 在并行流引发异常后,是否继续处理元素?(找到了发生这种情况的案例)。 这里有一般规则吗? 编辑(15-11-2016) 试图确定

  • 如何从Java 8流/lambda内部抛出检查异常? 换句话说,我想让像这样的代码编译: 此代码未编译,因为上面的方法抛出了,而该方法已被选中。 请注意,我不想在运行时异常中包装已检查的异常,而抛出包装的未检查的异常。我想抛出检查的异常本身,并且不向流中添加丑陋的/。