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

如何处理DataIntegrityViolationException以获取具体原因?

索嘉胜
2023-03-14

我正在开发一个java web应用程序。该应用程序是一个REST风格的后端。我使用SpringMVC作为我的web框架,使用JPA/Hibernate作为持久性。数据库是mysql。

我在数据库中有一个表,在那里我存储了一个简单的文本值和一个id。所以我在那里有两列。但是,我希望使这些文本值唯一。已经在sql中设置了这个。

现在我正在编写一个unittest来处理当有人试图多次插入同一个字符串时会发生什么。Spring返回给我一个数据完整性违反异常。根本原因是MySQLWellityConstraintViolationExc0019。从根本原因我可以得到sqlErrorCode.

但是有没有更好的方法来处理这个问题呢?因为我不想依赖mysqlexception,而且代码中没有错误代码。

共有1个答案

黄永怡
2023-03-14

我发现搜索由spring数据包装的DB异常的根本原因很不方便。在将新条目持久化到数据库之前,我将手动检查唯一性。

请记住,spring引发的异常是一个RuntimeException,您不应该处理RuntimeExceptions,因为它们表示代码中存在“bug”。这是你的责任,从一开始就不允许这种例外。

 类似资料:
  • 问题内容: 我需要在Spring 3.0应用程序中显示自定义消息。我有一个带有Hibernate的数据库,并且有几个约束。我对如何妥善处理存有疑问。我想知道是否有一种方法可以将异常映射到属性文件中的消息集,因为可以在约束验证中进行。我可以以任何方式自动处理它,还是必须在每个控制器中捕获此异常? 问题答案: 在违反约束的情况下显示用户友好消息的问题是,当将Hibernate的转换为Spring的时,

  • 问题内容: 我在web.xml中配置了一个错误servlet: 对? 在我的(通常)servlet中: 因此,在这种情况下,“ e”将是根本原因。 在我的ExceptionHandler类中,我有: 这就是问题。throwable.getCause()为null。 问题答案: 如果由servletcontainer捕捉到的异常是和声明捕捉异常 其他 比,那么它的原因实际上是打开并作为存储。因此,您

  • 我使用的是Spring Boot 2和Spring Boot starter数据jpa以及底层的MariaDB。 我有一个带有唯一键“用户名”的表。如果违反了此约束,我想捕获,但似乎Spring正在记录并且不会在记录后重新抛出(我最好的猜测)。被抛出。 我想在中捕获。 以下是几段代码片段: 堆栈跟踪:

  • 我将JPA2与Hibernate一起使用。有两个实体类,和。最后一个是第一个的继承实体。使用SINGLE_TABLE继承策略。当我尝试通过从id=“123456”的CardElement中查询

  • 下面的API接受来自客户端的json字符串,并将其映射到电子邮件对象中。如何将请求正文()作为原始字符串获取?(我需要原始字符串和键入版本的参数) PS:这个问题不是重复的:如何在SpringREST控制器中访问普通json主体?

  • 我正在开发一个仅支持iPhone的iOS 8应用程序。我想只支持iPhone 4S的纵向模式设备。 我有一个图形设计,它采用全屏内容。我使用自动布局来处理视图,并使其适用于所有屏幕。但是,我使用一个小资产来管理从iPhone4S工作的设计。当我在iPhone6S/6看到它时,内容非常小,大量额外的空间被浪费了。 当设备分辨率变大时,我想增加字体大小、图像大小。这个应用程序中有很多屏幕。 例如,我在