Spring CrudRepository异常

时间:2014-04-27 15:44:33

标签: java spring spring-data

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

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

}

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

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

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

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

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

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

您是否知道有关CrudRepository异常的明确文档?

谢谢

1 个答案:

答案 0 :(得分:45)

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

有四个主要群体 -

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

  • RecoverableDataAccessException - 这些是&#34;反对&#34;前一个 - 可恢复的例外 - 在一些恢复步骤之后。 API文档中的更多详细信息

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

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

也就是说,找到有关所有异常的文档的理想位置 - 在API本身 - 只需通过DataAccessException的层次结构。