Jeśli mówimy tylko o wytrwałości, Serializable
nie jest to potrzebne, ale najlepszą praktyką jest tworzenie bytów Serializable
.
Jeśli eksponujemy domain
/ entities
obiekty bezpośrednio wystawiane na warstwę prezentacji, to zamiast używać DTO
, w takim przypadku musimy zaimplementować Serializable
. Te obiekty domeny mogą być przechowywane w HTTPSession
celu buforowania / optymalizacji. Sesja http może być serializowana lub klastrowana. Jest to również wymagane do przesyłania danych między JVM
okolicznościami.
Kiedy używamy DTO
do oddzielenia warstwy trwałości od warstwy usług, oznaczanie obiektów domeny jako Serializable
nieproduktywne i naruszałoby „ encapsulation
”. Wtedy staje się anty-wzorcem.
Identyfikatory złożone
Klasa klucza podstawowego musi być możliwa do serializacji.
Modele POJO
Jeśli instancja jednostki ma być używana zdalnie jako obiekt odłączony, klasa jednostki musi implementować Serializable
interfejs.
Pamięć podręczna
Ponadto, jeśli wdrażasz clustered
drugi poziom, cache
Twoje encje muszą być serializable
. Identyfikator musi być, Serializable
ponieważ jest to wymóg JPA, ponieważ identifier
może być używany jako klucz dla wpisu pamięci podręcznej drugiego poziomu.
A kiedy serializujemy jednostki, upewnij się, że podajesz jawny serialVersionUID
modyfikator dostępu prywatnego. Ponieważ jeśli serializable
klasa nie deklaruje jawnie a serialVersionUID
, wówczas środowisko wykonawcze serializacji obliczy serialVersionUID
wartość domyślną dla tej klasy na podstawie różnych aspektów tej klasy, zgodnie z opisem w specyfikacji serializacji obiektów Java (TM). serialVersionUID
Obliczenia domyślne są bardzo wrażliwe na szczegóły klasy, które mogą się różnić w zależności od implementacji kompilatora i mogą w związku z tym powodować nieoczekiwane InvalidClassExceptions
podczas deserializacji.