문제

프로젝트에서 최대 절전 모드 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(); 
라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top