当前位置: 首页 > 面试题库 >

org.springframework.dao.DataIntegrityViolationException错误报告原因?

华景同
2023-03-14
问题内容

我正在使用hibernate插入到所有表均定义为非null的mysql表中。它有一个唯一的主键,并在几列上有另一个唯一的索引。

我收到以下错误:

org.springframework.dao.DataIntegrityViolationException:无法执行JDBC批处理更新。SQL
[插入MY_TABLE(col1,col2,col3,col4,ID_)值(?,?,?,?,?)] 约束[空]

此错误出现在客户日志中,我自己无法重现该问题,因此无法进行调试以查看insert语句中的值。

我的理解是“ constraint [null]”表示违反了“ not
null”约束。但是,查看我的代码,我看不到任何数据插入时任何数据都可能为null的可能方式,除非hibernate试图插入null
ID(这在hibernate中是一个非常糟糕的错误,因此似乎不太可能)。

但是,我可以看到违反唯一约束的情况。该消息是否可能会误导我,并且实际上收到了唯一的密钥冲突?“ constraint
[null]”是否总是表示违反了非null约束?


问题答案:

如果您在Spring源代码中搜索DataIntegrityViolationException的构造函数的调用者,则会发现它是在调用的org.springframework.orm.hibernate3.SessionFactoryUtils

return new DataIntegrityViolationException(ex.getMessage()  + "; SQL [" + jdbcEx.getSQL() +
                "]; constraint [" + jdbcEx.getConstraintName() + "]", ex);

因此,异常是由违反的约束引起的,并且null是JDBC异常返回的约束的名称。因此,您应该责怪MySQL驱动程序没有在JDBC异常中填充违反的约束名称。但是违反的约束可以是任何约束,而不一定是not null约束。



 类似资料:
  • 错误日志对于发现程序中的错误是非常有帮助的,但是有些时候它也会将应用程序的结构暴露给外部。为了有效的保护你的应用程序不受到由此而引发的问题。你需要将在你的服务器上使用开发和生产(线上)两套不同的配置。 开发环境 为了在开发环境中显示所有可能的错误,将你的 php.ini 进行如下配置: display_errors = On display_startup_errors = On error_re

  • 1.1.2. 错误报告 没有不会犯错的开发者,PHP的错误报告功能将协助您确认和定位这些错误。可以PHP提供的这些详细描述也可能被恶意攻击者看到,这就不妙了。使大众看不到报错信息,这一点很重要。做到这一点很容易,只要关闭display_errors,当然如果您希望得到出错信息,可以打开log_errors选项,并在error_log选项中设置出错日志文件的保存路径。 由于出错报告的级别设定可以导致

  • 当简单报表不适用于子报表时,此操作有效...

  • 需知 当你觉得发现了一个Swoole内核的bug时,请提出报告。 Swoole的内核开发者们或许还不知道问题的存在, 除非你主动提出报告,否则BUG也许将很难被发现并修复, 你可以在 Github的issue区 提出错误报告(即点击右上角绿色的New issue按钮),这里的错误报告将会被最优先解决。 请不要在邮件列表或私人信件中发送错误报告,Github的issue区同样可以提出对于Swoole

  • 错误报告 Stylus内置梦幻般的错误报告,针对语法、解析以及计算错误,完整的堆栈跟踪,行号和文件名。 解析错误 解析错误例子: body form input == padding 5px 呈现为: Error: /Users/tj/Projects/stylus/testing/test.styl:4 3: ' form input' 4: ' == padding

  • 我试图通过一个类中的函数连接到MySql。同样的事情可以做得更容易,但这也是一次学习的经历。代码全部按预期工作,但是如果MySql查询失败,mysqli_error()返回空白,mysqli_errno()返回0。我在手动将数据输入mysql时发现了错误,并且它在db中是一个太短的列,但是我不明白为什么mysqli_error()和mysql_errno()都没有报告这个错误。提前感谢您的任何帮助