我在我的项目中使用了Hibernate JPA和Spring。假设我尝试插入具有重复键值的记录,插入查询将引发异常。
现在,是否可以在运行时从SQL Exception对象获取表名,字段名和可能的异常原因!?
答案 0 :(得分:1)
SQLExceptions倾向于只包装数据库错误,只有在数据库丢失的错误中包含这些信息时才能获得。根据我调试hibernate和JDBC的经验,我会冒这个问题的答案通常是“不”,但可能有例外。
答案 1 :(得分:1)
正如其他答案所提到的,大部分时间你都受限于数据库给出的内容。但是在某些情况下,Hibernate可以告诉你问题 - 它不是表和字段,但可以是实体和属性
例如,如果您尝试在列中放入太大的值,则可以使用此:
try {
entityManager.persist(object);
} catch (InvalidStateException e) {
log.info("Caught Hibernate exception: #0", e.getClass().getName());
InvalidValue[] invalidValues = e.getInvalidValues();
for(InvalidValue invalidValue : invalidValues) {
log.info("Invalid Property #0 has value: #1", invalidValue.getPropertyName(), invalidValue.getPropertyName());
}
}
答案 2 :(得分:0)
hibernate将SQLException包装为JDBCException,并尝试使用附加到SessionFactory的SQLExceptionConverter将其转换为更具意义的完全异常,例如ConstraintViolationException。
SQLException sqlException = ((JDBCException)ex).getSQLException();