Jeśli mówimy tylko o wytrwałości, Serializablenie jest to potrzebne, ale najlepszą praktyką jest tworzenie bytów Serializable.
Jeśli eksponujemy domain/ entitiesobiekty bezpośrednio wystawiane na warstwę prezentacji, to zamiast używać DTO, w takim przypadku musimy zaimplementować Serializable. Te obiekty domeny mogą być przechowywane w HTTPSessioncelu buforowania / optymalizacji. Sesja http może być serializowana lub klastrowana. Jest to również wymagane do przesyłania danych między JVMokolicznościami.
Kiedy używamy DTOdo oddzielenia warstwy trwałości od warstwy usług, oznaczanie obiektów domeny jako Serializablenieproduktywne 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ć Serializableinterfejs.
Pamięć podręczna
Ponadto, jeśli wdrażasz clustereddrugi poziom, cacheTwoje encje muszą być serializable. Identyfikator musi być, Serializableponieważ jest to wymóg JPA, ponieważ identifiermoże być używany jako klucz dla wpisu pamięci podręcznej drugiego poziomu.
A kiedy serializujemy jednostki, upewnij się, że podajesz jawny serialVersionUIDmodyfikator dostępu prywatnego. Ponieważ jeśli serializableklasa nie deklaruje jawnie a serialVersionUID, wówczas środowisko wykonawcze serializacji obliczy serialVersionUIDwartość domyślną dla tej klasy na podstawie różnych aspektów tej klasy, zgodnie z opisem w specyfikacji serializacji obiektów Java (TM). serialVersionUIDObliczenia 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 InvalidClassExceptionspodczas deserializacji.