SQL 예외 객체에서 예외를 일으킨 필드 및 테이블 이름 가져 오기
문제
프로젝트에서 최대 절전 모드 JPA와 Spring을 사용하고 있습니다. 중복 키 값으로 레코드를 삽입하려고하면 삽입 쿼리가 예외가 발생한다고 가정합니다.
이제 런타임에 테이블 이름, 필드 이름 및 가능한 원인을 얻을 수 있습니까?
해결책
다른 답변에서 언급했듯이, 대부분의 시간은 데이터베이스가 제공 한 것에 제한됩니다. 그러나 경우에 따라 최대 절전 모드는 문제를 말할 수 있습니다. 테이블과 필드는 아니지만 엔티티와 재산이 될 수 있습니다.
예를 들어 열에 너무 큰 값을 넣으려고하면 다음을 사용할 수 있습니다.
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());
}
}
다른 팁
sqlexeceptions는 데이터베이스 오류를 마무리하는 경향이 있습니다. 데이터베이스가 던진 오류에 포함 된 경우 해당 정보를 얻을 수 있습니다. 최대 절전 모드 및 JDBC의 디버깅 경험 에서이 질문에 대한 답은 일반적으로 "아니오"라는 것을 위험에 빠뜨릴 수 있지만 예외가있을 수 있습니다.
Hibernate는 sqlexception을 jdbcexception으로 랩핑하고 SessionCactory에 첨부 된 sqlexceptionConcepter를 사용하여 SqulexceptionConception과 같은 전체 예외로 더 의미가있는 것으로 변환하려고합니다.
SQLException sqlException = ((JDBCException)ex).getSQLException();
제휴하지 않습니다 StackOverflow