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' –
有人知道这是否是预料到的?
答案 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]