Dan*_*ana 12 java spring hibernate
我正在使用hibernate插入一个mysql表,其中所有列都定义为非null.它具有唯一的主键和多个列上的另一个唯一索引.
我收到以下错误:
org.springframework.dao.DataIntegrityViolationException:无法执行JDBC批量更新; SQL [插入MY_TABLE(col1,col2,col3,col4,ID_)值(?,?,?,?,?)]; 约束[null]
此错误在客户日志中,我无法自己重现问题,因此我无法进行调试以查看insert语句中的值.
我的理解是"约束[null]"意味着违反了"非空"约束.但是,看看我的代码,我看不到任何可能的方式,插入时任何数据都可能为null,除非hibernate试图插入一个空ID(这在hibernate中是一个非常糟糕的错误,所以似乎不太可能).
但是,我可以看到如何违反唯一约束.该消息是否可能具有误导性,我实际上是在获得唯一的密钥违规?"constraint [null]"是否始终意味着违反了非空约束?
JB *_*zet 11
如果你在Spring源代码中搜索DataIntegrityViolationException构造函数的调用者,你会发现它被调用org.springframework.orm.hibernate3.SessionFactoryUtils:
return new DataIntegrityViolationException(ex.getMessage() + "; SQL [" + jdbcEx.getSQL() +
"]; constraint [" + jdbcEx.getConstraintName() + "]", ex);
Run Code Online (Sandbox Code Playgroud)
因此异常是由违反的约束引起的,并且null是JDBC异常返回的约束的名称.所以你应该责怪MySQL驱动程序没有填充JDBC异常中违反的约束名称.但违反的约束可能是任何约束,并不一定是not null约束.
| 归档时间: |
|
| 查看次数: |
48506 次 |
| 最近记录: |