【发布时间】:2010-12-10 14:58:53
【问题描述】:
我正在使用带有 HibernateSupportDao 的 Spring Hibernate,当我尝试发送多行数据以存储在我的数据库中时,它会在特定行引发 DataIntegrityViolationException。相同的场景在同一张桌子上的任务中仍然有效。即使我对当前任务使用相同的代码,我也没有遇到问题。为什么会抛出DataIntegrityViolationException,我该如何纠正?
【问题讨论】:
我正在使用带有 HibernateSupportDao 的 Spring Hibernate,当我尝试发送多行数据以存储在我的数据库中时,它会在特定行引发 DataIntegrityViolationException。相同的场景在同一张桌子上的任务中仍然有效。即使我对当前任务使用相同的代码,我也没有遇到问题。为什么会抛出DataIntegrityViolationException,我该如何纠正?
【问题讨论】:
当尝试插入或更新数据导致违反完整性约束时抛出异常。请注意,这不是纯粹的关系概念;大多数数据库类型都需要唯一的主键。
基本上这意味着 Hibernate 试图做某事,但数据库引发了异常。最常见的情况可能是您正在删除 parent,但没有删除带有 外键 的 child 到该 parent em>。
您的传递持久性(即级联)设置是什么?
【讨论】:
当您在从表中选择某些字段时遇到此异常时,原因可能是 select 语句中某个字段的长度。检查所有选择字段长度并将其与表描述进行比较。任何字段都会违反字段限制。
【讨论】:
DataIntegrityViolationException 也可能违反数据库上的唯一约束(即备用键)。检查您插入的数据行是否包含违反此类唯一约束的重复数据。
【讨论】:
如果您从某个地方导入数据库,那么您也必须获取服务器的 data 文件夹,并将此 data 文件夹更改为您服务器的数据文件夹。
【讨论】:
我在 ExceptionInfoHandler 中处理 DataIntegrityViolationException,查找根本原因消息中出现的 DB 约束,并通过以下方式将其转换为 i18n 消息 地图。在此处查看代码:https://stackoverflow.com/a/42422568/548473
【讨论】: