2013-07-26 9 views
5

Jak mogę uzyskać nazwę pola powodując ? Jedynym pewnym sposobem sprawdzenia ograniczenia unikalnego jest zatwierdzenie transakcji, więc nawet jeśli sprawdzę to przed wyrzuceniem wyjątku. Tak więc muszę komunikować się z użytkownikiem z polem powodując problem z zapisem.
Szczegółowy komunikat jest bardziej lub mniej techniczny i nie do zaakceptowania przez użytkownika. To także zależy od sterownika bazy danych :( IMO nazwa pola wystarczy, wartość problematyczne mogę dostać się z obiektu. także inne informacje mogę przygotować ... ale nazwę pola.Wyodrębnij nazwę pola powodującą wyjątek ConstraintViolationException

+0

Czy obejrzałeś ten post (https://forum.hibernate.org/viewtopic.php?p=2414824)? – Hippoom

+0

Wygląda na to, że Twój problem jest podobny do http://stackoverflow.com/questions/2995042/how-to-extract-actual-entity-and-property-name-that-is-a-duplicate-ofrom-hibernat?rq = 1. Jeśli chcesz to zrobić. Będzie oparty na sterowniku bazy danych. –

+0

Widziałem wcześniej @Hippoom, ale uznałem to za przestarzały stan wiedzy :) Wygląda jak "rzeźbienie kamienia przez zęby". Również widziałem, co wskazał Haim, ale to nie jest rozwiązanie ... i również nieaktualne. Uważam, że jest to możliwe, jest to bardzo powszechny problem, który myślę. – Saram

Odpowiedz

3

nie może pojawi się wyjątek i wiadomość przez swojego przyczyny tak:

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

która dała Ci prowadzić jak to [SQL0407] Null values not allowed in column or variable GROUP00002. ostatnie słowo to nazwa kolumny, można przełożyć je dopasować swoje pole następnie (przy użyciu HashMap statycznego może).

+1

To jedyne rozwiązanie, które wymyśliłem. Ale dla mnie nie jest to niezależne od wdrożenia. Komunikat jest inny dla wszystkich baz danych, które znam. Nie mogę też uwierzyć, że sprzedawca bazy danych nie zmieni tego w przyszłości :( – Saram

Powiązane problemy