Spring CrudRepositoryexception

我有这个Spring Data CrudRepository来处理数据库上的CRUD操作。

 @Repository public interface IUserRepository extends CrudRepository { } 

User是我的数据库的用户表的实体。 CrudRepository将以下操作添加到存储库:

  • delete(String ID)
  • findOne(String ID)
  • save(User user)

如文档中所述,如果给定的id为null,则delete和find操作会抛出IllegalArgumentException ,而save操作不会抛出任何exception。

问题是CrudRepository的javadoc没有提到这些操作抛出的其他exception。 例如,如果DB中不存在提供的ID,则不会告诉delete(String ID)操作抛出EmptyResultDataAccessException

save(User user)操作的javadoc中,如果您插入一个破坏一个数据完整性约束的新用户(在唯一字段和外键上),则不清楚抛出哪些exception。 此外,它不会警告您是否正在编写新用户或现有用户:它只是创建一个新用户或覆盖(如果存在)(因此它是一个插入+更新操作)。

在企业应用程序中,我应该能够捕获操作可以抛出的每个可抛出的exception,我应该在操作的javadoc中读到它。

您是否知道有关CrudRepositoryexception的任何明确文档?

谢谢

Spring具有内置的exception转换机制,因此JPA持久性提供程序抛出的所有exception都转换为Spring的DataAccessException – 对于使用@Repository(或已配置)注释的所有bean。

有四个主要群体 –

  • NonTransientDataAccessException – 除非纠正exception的原因,否则这些exception会导致相同操作的重试失败。 因此,如果您传递非现有ID,则除非数据库中存在id,否则它将失败。

  • RecoverableDataAccessException – 这些是前一个的“反面” – 可恢复的exception – 在一些恢复步骤之后。 API文档中的更多详细信息

  • ScriptException – 与SQL相关的exception,例如在尝试处理格式不正确的脚本时。

  • TransientDataAccessException – 这些是在没有任何显式步骤的情况下进行恢复时的exception,例如,当数据库超时时,您将在几秒钟后重试。

也就是说,找到有关所有exception的文档的理想位置 – 在API本身 – 只需要遍历DataAccessException的层次结构。