我在项目中使用Hibernate JPA和Spring。假设如果我尝试插入具有重复键值的记录,则插入查询将引发异常。
现在,是否可以在运行时从SQL Exception对象获取表名称,字段名称和可能的异常原因?
最佳答案
正如其他答案所提到的,大多数时候,您只能使用数据库给出的信息。但是在某些情况下,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());
}
}