加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > Java > 正文

java – Spring CrudRepository异常

发布时间:2020-12-14 16:26:47 所属栏目:Java 来源:网络整理
导读:我有这个 Spring数据CrudRepository处理DB上的CRUD操作. @Repositorypublic interface IUserRepository extends CrudRepositoryUser,String {} 用户是我的数据库用户表的实体. CrudRepository将以下操作添加到存储库: delete(String ID) findOne(String ID)
我有这个 Spring数据CrudRepository处理DB上的CRUD操作.
@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异常的明确文档?

谢谢

解决方法

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

有四个主要组 –

> NonTransientDataAccessException – 除非修正异常的原因,否则相同操作的重试将会失败.因此,如果您传递非现有的ID,例如,除非数据库中存在该id,否则它将失败.
> RecoverableDataAccessException – 这些是前一个的“相反” – 可恢复的异常 – 在一些恢复步骤之后. API文档中的更多详细信息
> ScriptException – SQL相关异常,当尝试处理不是格式良好的脚本时.
> TransientDataAccessException – 这些是在没有任何明确步骤的情况下可以恢复的例外.当数据库有超时时,您将在几秒钟后重试.

也就是说,找到关于所有异常的文档的理想场所在于API本身 – 只需要遍历DataAccessException的层次结构.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读