【发布时间】:2012-10-25 16:45:12
【问题描述】:
我正在使用 hibernate 插入到所有列都定义为非空的 mysql 表中。它有一个唯一的主键和几个列上的另一个唯一索引。
我收到以下错误:
org.springframework.dao.DataIntegrityViolationException: 不能 执行JDBC批量更新; SQL [插入 MY_TABLE(col1, col2, col3, col4, ID_) 值 (?, ?, ?, ?, ?)];约束 [null]
此错误在客户日志中,我自己无法重现该问题,因此无法进行调试以查看插入语句中的值。
我的理解是,“约束 [null]”意味着违反了“非空”约束。但是,查看我的代码,我看不到任何数据在插入时可能为空的任何可能方式,除非休眠尝试插入空 ID(这将是休眠中的一个非常糟糕的错误,所以看起来不太可能)。
但是,我可以看到违反唯一约束是如何发生的。该消息是否可能具有误导性,并且我实际上遇到了唯一的密钥违规? "constraint[null]" 是否总是意味着违反了非空约束?
【问题讨论】:
-
除非
not null列尝试提供null值,否则我无法猜测为什么会导致该异常。顺便说一句,如果您使用的是旧版本的 JDBC 驱动程序,请不要忘记将其替换为最新版本(10+)。否则以后还会引起其他问题。 -
这是 mysql 5.1,不是 Oracle。