2015-02-06 7 views
6

Posiadanie długiego pola na obiekcie zarządzanym przez hibernację może być niebezpieczne przy wartościach pustych. Kiedy Hibernacja próbuje ustawić wartość null na element pierwotny, zostanie zgłoszony wyjątek.Unikaj "Wyjątku trybu hibernacji Wartość Null została przypisana do właściwości prymitywnego ustawiacza typów" bez wrapperów.

Najlepszym rozwiązaniem powinno być użycie opcji Long zamiast długiej, aby wartość NULL mogła być przypisana do pola Long.

Ale pracuję nad projektem, w którym nie możemy używać typów Long lub Integer. Zastanawiam się, czy istnieje sposób na przesłonięcie typów hibernacji, aby użyć metody nullSafe lub coś podobnego.

+1

OK, po prostu muszę zapytać ... * Dlaczego * nie możesz użyć 'Long' i/lub' Integer'? –

Odpowiedz

-1

Zawsze używam kapsułkach typy klas, ale jeśli nie można sprawdzić, jednostka przyporządkowuje przed utrzymują to coś takiego:

if (entity.getAttribute == null){ 
entity.setAttribute(0); //case of long, int... 
} 
+0

tak do mnie, ale problem dotyczy danych, które już znajdują się w bazie danych, więc nie jest to opcja (aktualizacja przechowywanych danych również nie jest opcją) – ilopezluna

+0

To nie zostanie skompilowane, jeśli zwracany jest typ "entity.getAttribute() 'jest' int' lub 'long'. Co więcej, problem z OP polega na tym, że biblioteka hibernacji * sama * próbuje wywołać * setter * z 'null'. –

Powiązane problemy