@Repository public interface IUserRepository extends CrudRepository<User,String> { }
用户是我的数据库用户表的实体. CrudRepository将以下操作添加到存储库:
> delete(String ID)
> findOne(String ID)
>保存(用户用户)
如documentation所述,删除和查找操作会抛出IllegalArgumentException,以防给定的id为null,而保存操作不会引发任何异常.
问题是,CrudRepository的javadoc没有提到这些操作抛出的其他异常.例如,如果在DB中不存在提供的ID,则不会指出delete(String ID)操作将抛出一个EmptyResultDataAccessException异常.
在保存(用户)操作的javadoc中,不清楚在插入一个破坏一个数据完整性约束的新用户(在唯一字段和外键上)时会抛出哪些异常.此外,它不会警告您是否正在编写新的或存在的用户:它只是创建一个新的用户或覆盖(如果存在)(因此它是一个插入更新操作).
在企业应用程序中,我应该能够捕获一个操作可以抛出的每个可抛出的异常,我应该在操作的javadoc中读取它.
您是否知道有关CrudRepository异常的明确文档?
谢谢
解决方法
有四个主要组 –
> NonTransientDataAccessException – 除非修正异常的原因,否则相同操作的重试将会失败.因此,如果您传递非现有的ID,例如,除非数据库中存在该id,否则它将失败.
> RecoverableDataAccessException – 这些是前一个的“相反” – 可恢复的异常 – 在一些恢复步骤之后. API文档中的更多详细信息
> ScriptException – sql相关异常,当尝试处理不是格式良好的脚本时.
> TransientDataAccessException – 这些是在没有任何明确步骤的情况下可以恢复的例外.当数据库有超时时,您将在几秒钟后重试.
也就是说,找到关于所有异常的文档的理想场所在于API本身 – 只需要遍历DataAccessException的层次结构.