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

Java 如何处理DataIntegrityViolationException以获取具体原因?,java,mysql,spring,hibernate,jpa,Java,Mysql,Spring,Hibernate,Jpa,我正在开发一个java web应用程序。该应用程序是一个REST风格的后端。我使用SpringMVC作为我的web框架,使用JPA/Hibernate作为持久性。数据库是mysql 我在数据库中有一个表,在那里我存储了一个简单的文本值和一个id。所以我在那里有两列。但是,我希望使这些文本值唯一。已经在sql中设置了这个 现在我正在编写一个单元测试来处理当有人多次尝试插入同一个字符串时发生的情况。Spring返回一个DataIntegrityViolationException。根本原因是MySQ

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

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

现在我正在编写一个单元测试来处理当有人多次尝试插入同一个字符串时发生的情况。Spring返回一个DataIntegrityViolationException。根本原因是MySQLIntegrityConstraintViolationException。从根本原因我可以得到sqlErrorCode


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

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


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

你真的需要看看根本原因吗?2列表中的数据完整性约束冲突不可能是别的吗?如果你这样做了,你可以在数据层附近有一个转换机制,将其作为你的自定义异常重新引用,这样你关心的代码就不需要依赖于特定的数据存储类型或库。转换机制是我目前的解决方案。但我想你是对的,我不能做太多其他的事。那是更好的方法。所以我不必为Mysql的细节费心,似乎我没有发现任何其他东西。