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

Spring CrudRepository可以抛出什么RuntimeExctive?

梁丘招
2023-03-14

我有这个Spring Datacrudepository,它处理数据库上的CRUD操作。

@Repository
public interface IUserRepository extends CrudRepository<User, String> {

}

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

  • 删除(字符串ID)

如文档中所述,如果给定的id为null,则删除和查找操作会抛出IllegalArgumentException,而保存操作不会抛出任何异常。

问题是Crudepository的javadoc没有提到这些操作引发的其他异常。例如,如果提供的ID在数据库中不存在,它不会告诉delete(String ID)操作抛出EmptyResultDataAccessException

save(User User)操作的javadoc中,不清楚在插入一个新用户时会引发哪些异常,该用户违反了一个数据完整性约束(在唯一字段和外键上)。此外,它不会警告您是否正在编写新用户或现有用户:它只会创建一个新用户,或者在存在时进行覆盖(因此这是一个插入更新操作)。

在企业应用程序中,我应该能够捕获操作可以抛出的所有可抛出异常,我应该在操作的javadoc中了解这一点。

你知道任何关于crudepository异常的清晰文档吗?

共有2个答案

夹谷英杰
2023-03-14

我捕获父异常DataAccessException。

import org.springframework.dao.DataAccessException;
闻人栋
2023-03-14

Spring具有内置的异常转换机制,因此JPA持久性提供程序引发的所有异常都将转换为Spring的DataAccessExctive-用于所有用@Repository注释(或配置)的bean

主要有四类-

>

  • 非瞬态数据访问异常-除非异常的原因得到纠正,否则重试相同操作将失败。因此,例如,如果您传递不存在的id,除非该id存在于数据库中,否则它将失败。

    RecoverableDataAccessException(可恢复的数据访问异常)——这些异常与前一个异常“相反”——经过一些恢复步骤后是可恢复的异常。API文档中有更多详细信息

    ScriptException——例如,当试图处理格式不正确的脚本时,与SQL相关的异常。

    当恢复不需要任何显式步骤时,这些异常是可能的,例如当数据库超时时,几秒钟后您正在重试。

    也就是说,找到关于所有异常的文档的理想位置是API本身,只需浏览DataAccessException的层次结构即可。

  •  类似资料:
    • 问题内容: 运行此命令时: 响应为: 这对我来说真是太棒了。我本以为这会带来编译时错误。 为什么我可以在Java中抛出null,为什么将其转换为NullPointerException? (实际上,鉴于我抛出的是null,因此我不知道这是否是“ upcast”) 除了一个非常愚蠢的面试问题(请没人在面试中问这个问题)之外,我看不到任何理由。也许您想被解雇,但这就是…我的意思是,为什么还会有人呢?

    • 所以我必须做以下其中之一: 在每个doSomething调用周围添加try catch块 在main中添加throws语句 删除doSomething中的throws语句 将该条件作为前提条件,这样不遵循该条件就会导致未定义的行为或类似的行为。 3将不起作用,因为doSomething可能会在客户端使用时引发异常。1和2简直是多余的,我认为应该避免。 我的问题是:在提到的选项(或任何其他选项)中,

    • 我有密码 我想知道抛出怎么会发生这种情况。这显然发生在我的应用程序的一个用户身上,但我无法跟踪出了什么问题。

    • 问题内容: final Multimap terms = getTerms(bq); for (Term t : terms.keySet()) { Collection C = new HashSet(terms.get(t)); if (!C.isEmpty()) { for (Iterator it = C.iterator(); it.hasNext();) { BooleanClause

    • 问题内容: 我试图将两个’Employee’对象添加到TreeSet中: 但是它抛出一个ClassCastException: 但是,如果我仅将一个对象添加到TreeSet中: 或者,如果我改用HashSet: 那就成功了。为什么会发生异常,我该如何解决? 问题答案: 要么必须实现,或者你需要提供一个比较创建时。 在文档中对此进行了详细说明: 插入排序集中的所有元素都必须实现接口(或被指定的比较器

    • 问题内容: 将字符串解析为字节时出现异常 问题答案: 这是因为默认的parse方法要求使用十进制格式的数字来解析十六进制数字,请使用以下parse: 其中16是解析的基础。 至于您的评论,您是对的。字节的最大值为0x7F。因此,您可以将其解析为并执行二进制与操作以获得LSB,即您的字节: