2016-03-23 19 views
7

Czy mogę używać Opcjonalnie w polach elementu hibernacji? Może z pewnym niestandardowym typem użytkownika?Java 8 Opcjonalne w polu jednostki

Wiem, że mogę go używać w metodach przy użyciu AccesType.FIELD (mimo to używam AccesType.FIELD).

Dlaczego tego chcę? Cóż, chcę pozostać tak daleko od wartości null, jak to możliwe.

Odpowiedz

1

Nie należy używać Optional jako pola w klasie (do użycia w trybie hibernacji).

Jak podaje Javadoc, jest to klasa oparta na wartościach, więc nie można jej przekształcać do postaci szeregowej, a użycie równania odniesienia (==) i kodu identyfikacyjnego tożsamości ma nieprzewidywalne wyniki.

Zamiast tego można przechowywać instancję klasy docelowej (zero jest w porządku w relacyjnych bazach danych) i zwracać Opcjonalnie od akcesorów (nie jest to getter, który Hibernates spodziewa się zwrócić tę samą klasę co pole, jeśli pamiętam dobrze).

Mam nadzieję, że to pomoże.

+0

Co jest nieprzewidywalne w implementacji opcji Optional's i hashCode? Wygląda na to, że mają jasną, stanowczą umowę w Javadoc, z którą łączysz się. –

+0

Przepraszamy za skrót. Nie miałem na myśli równości i hashcode, ale == i hashcode tożsamości. Dziękuję za poprawę. – cdelmas