2013-07-26 22 views
5

Wie bekomme ich Feldname verursacht org.hibernate.exception.ConstraintViolationException? Der einzige sichere Weg, Unique Constraint zu überprüfen, ist das Transaktions-Commit, also selbst wenn ich es überprüfe, bevor die Ausnahme ausgelöst werden kann. Also muss ich mit dem Benutzer kommunizieren, der Feld verursacht, das Sicherheitsproblem verursacht.
Die detaillierte Nachricht ist mehr oder weniger technisch und nicht akzeptabel für den Benutzer. Es hängt auch von Datenbanktreiber :( IMO Feldname genug ist, der problematische Wert am besten vor Objekt bekommen kann. Auch andere Informationen, die ich vorbereiten können ... aber die Feldnamen.Feldname extrahieren verursacht ConstraintViolationException

+0

Haben Sie diesen Beitrag (https://forum.hibernate.org/viewtopic.php?p=2414824) angeschaut? – Hippoom

+0

Ihr Problem ähnelt http://stackoverflow.com/questions/2995042/how-to-extract-actual-entity-and-property-name-that-is-a-duplicate-from-hibernat?rq = 1. Wenn du es machen willst. Es basiert auf dem Datenbanktreiber. –

+0

Ich habe schon gesehen, was @Hippoom vorher verlinkt hat, aber ich habe es als veralteten Wissensstand angesehen :) Es sieht aus wie 'Stein nach Zähnen formen'. Ich habe auch gesehen, was Haim deutete, aber es ist keine Lösung ... und auch veraltet. Ich glaube, es ist möglich, es ist ein sehr häufiges Problem, denke ich. – Saram

Antwort

3

kann nicht Sie erhalten die Ausnahme und die Nachricht durch die Sache wie folgt aus:

try{ 
     t.commit(); 
    }catch (ConstraintViolationException e) { 
     e.getCause().getMessage();// 
    } 

, die Sie mögen dieses [SQL0407] Null values not allowed in column or variable GROUP00002. das letzte Wort führen wird gegeben ist Ihre Spaltennamen, und Sie können es Übersetzungs Feld dann entsprechen (mit statischen HashMap vielleicht)

+1

Das ist die einzige Lösung, die ich herausgefunden habe. Aber für mich ist es nicht implementierungsunabhängig. Die Nachricht unterscheidet sich für alle Datenbanken, die ich kenne. Ich kann auch nicht glauben, dass der Datenbankanbieter es in Zukunft nicht ändern wird :( – Saram

Verwandte Themen