当MySQLIntegrityConstraintViolationException发生时,为什么Spring Framework不会抛出DuplicateKeyException?

时间:2013-04-12 07:16:55

标签: java mysql spring hibernate

DuplicateKeyException延伸DataIntegrityViolationException。但是,如果违反任何唯一键约束而不是DataIntegrityViolation,则Spring框架会抛出DuplicateKeyException异常。

我有一个订单表,订单代码是唯一的。当我尝试插入带有重复代码的订单时,我期待一个DuplicateKeyException,但是我收到了DataIntegrityViolationException。

这是堆栈跟踪:

org.springframework.dao.DataIntegrityViolationException: Duplicate entry '1-561336327' for key 'code_UNIQUE'; SQL [n/a]; constraint [null]; nested exception is 
org.hibernate.exception.ConstraintViolationException: Duplicate entry '1-561336327' for key 'code_UNIQUE' 
com.mysql.jdbc.exceptions.jdbc4.MySQLIntegrityConstraintViolationException: Duplicate entry '1-561336327' for key 'code_UNIQUE' –

有人知道这是否是预料到的?

1 个答案:

答案 0 :(得分:-3)

从Spring doc(对我来说似乎相当清楚)

public class DuplicateKeyException 扩展DataIntegrityViolationException

尝试插入或更新数据导致违反主键或唯一约束时抛出异常。请注意,这不一定是纯粹的关系概念;大多数数据库类型都需要唯一的主键。 [http://static.springsource.org/spring/docs/3.0.x/javadoc-api/org/springframework/dao/DuplicateKeyException.html]

public class DataIntegrityViolationException 扩展NonTransientDataAccessException

尝试插入或更新数据导致违反完整性约束时抛出异常。请注意,这不仅仅是一个关系概念;大多数数据库类型都需要唯一的主键。 [http://static.springsource.org/spring/docs/3.0.x/javadoc-api/org/springframework/dao/DataIntegrityViolationException.html]