【问题标题】:How can we solve the DataIntegrityViolationException in Spring Hibernate?我们如何解决 Spring Hibernate 中的 DataIntegrityViolationException?
【发布时间】:2010-12-10 14:58:53
【问题描述】:

我正在使用带有 HibernateSupportDao 的 Spring Hibernate,当我尝试发送多行数据以存储在我的数据库中时,它会在特定行引发 DataIntegrityViolationException。相同的场景在同一张桌子上的任务中仍然有效。即使我对当前任务使用相同的代码,我也没有遇到问题。为什么会抛出DataIntegrityViolationException,我该如何纠正?

【问题讨论】:

    标签: hibernate spring


    【解决方案1】:

    Directly from the API:

    当尝试插入或更新数据导致违反完整性约束时抛出异常。请注意,这不是纯粹的关系概念;大多数数据库类型都需要唯一的主键。

    基本上这意味着 Hibernate 试图做某事,但数据库引发了异常。最常见的情况可能是您正在删除 parent,但没有删除带有 外键child 到该 parent em>。

    您的传递持久性(即级联)设置是什么?

    【讨论】:

    • 这里我使用 Spring hiernate Annotations,并维护表之间的关系,我将 ManytoOne 关系与 fetch 模式保持为 EAGER。这里有一点是当我在同一张表上进行其他操作时,例如,我正在获取表的数据并在提交时进行一些修改,必须删除以前的整个数据,而我修改的新数据是去商店。此任务运行成功。在这种情况下,我还可以在页面中追加新行。
    【解决方案2】:

    当您在从表中选择某些字段时遇到此异常时,原因可能是 select 语句中某个字段的长度。检查所有选择字段长度并将其与表描述进行比较。任何字段都会违反字段限制。

    【讨论】:

      【解决方案3】:

      DataIntegrityViolationException 也可能违反数据库上的唯一约束(即备用键)。检查您插入的数据行是否包含违反此类唯一约束的重复数据。

      【讨论】:

      • 关于这个的问题。处理来自 db 而不是来自应用程序本身的重复验证是一种好习惯吗?
      • 两者都可以,但当时只有 DB 知道它是否重复。如果没有 db,你将如何处理应用中的验证?
      【解决方案4】:

      如果您从某个地方导入数据库,那么您也必须获取服务器的 data 文件夹,并将此 data 文件夹更改为您服务器的数据文件夹。

      【讨论】:

        【解决方案5】:

        我在 ExceptionInfoHandler 中处理 DataIntegrityViolationException,查找根本原因消息中出现的 DB 约束,并通过以下方式将其转换为 i18n 消息 地图。在此处查看代码:https://stackoverflow.com/a/42422568/548473

        【讨论】:

          猜你喜欢
          • 2014-12-11
          • 2011-01-07
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2015-12-04
          • 1970-01-01
          • 2023-02-22
          相关资源
          最近更新 更多