2009-05-06 96 views

回答

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()); 
    } 
} 
1

SQLExceptions傾向於只包裝數據庫錯誤,如果它包含在數據庫拋出的錯誤中,則只能獲得該類信息。根據我對調試hibernate和JDBC的經驗,我認爲這個問題的答案通常是「否」,但可能會有例外。

0

hibernate將SQLException封裝爲JDBCException,並試圖將其轉換爲更具意義的完全異常,如使用連接到SessionFactory的SQLExceptionConverter的ConstraintViolationException。

SQLException sqlException = ((JDBCException)ex).getSQLException();