我在项目中使用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());
    }
}

08-06 20:51