Erste das Feld und Tabellennamen, die eine Ausnahme von einem SQL-Exception-Objekt verursacht

StackOverflow https://stackoverflow.com/questions/829424

Frage

Ich verwende Hibernate JPA und Spring in meinem Projekt. Nehmen wir an, wenn ich versuchen, einen Datensatz mit doppelten Schlüsselwert einzufügen, wird der Insert-Abfrage eine Ausnahme werfen.

Nun ist es möglich, die Tabellennamen, Feldnamen und mögliche Ursache für die Ausnahme von dem SQL-Exception-Objekt zur Laufzeit bekommen!?

War es hilfreich?

Lösung

Wie die anderen Antworten erwähnt haben, die meiste Zeit Sie beschränken sich auf das, was Sie von der Datenbank angegeben. In einigen Fällen jedoch kann Hibernate Sie das Problem sagen - es ist nicht die Tabelle und das Feld wird sein, sondern kann das Unternehmen und Immobilien

sein

Zum Beispiel, wenn Sie versuchen, einen zu großen Wert in einer Spalte setzen Sie diese verwenden können:

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

Andere Tipps

SQLExceptions neigen dazu, nur Datenbankfehler einpacken, können Sie nur diese Art von Informationen erhalten, wenn sie in dem Fehler enthalten war, die Ihre Datenbank warf. Nach meiner Erfahrung von Debug-Hibernate und JDBC Sachen, würde ich Gefahr, dass die Antwort auf diese Frage allgemein „Nein“ ist, aber es könnte Ausnahmen geben.

Hibernate SQLException als JDBCException wickelt und versucht, es zu konvertieren vollständige Ausnahme wie ConstraintViolationException mit SQLExceptionConverter mehr Sinn, der Session angebracht ist.

SQLException sqlException = ((JDBCException)ex).getSQLException(); 
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top