2009-05-06 9 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はデータベースエラーのラップアップを行う傾向があります。データベースがスローしたエラーにSQLExceptionが含まれていると、そのような情報しか取得できません。私がハイバーネイトとJDBCをデバッグした経験では、この質問に対する答えは一般的に「いいえ」ですが、例外があるかもしれません。

0

hibernateはJDBCExceptionとしてSQLExceptionをラップし、SessionFactoryに添付されているSQLExceptionConverterを使用してConstraintViolationExceptionのような完全な例外に変換しようとします。

SQLException sqlException = ((JDBCException)ex).getSQLException(); 
関連する問題