2010-09-20 70 views
10

Możliwe duplikaty:
Do Hibernate table classes need to be Serializable?
What does Serializable mean?Co to jest Serializable? Co to znaczy?

public class ExampleEntity implements Serializable 
{ 
    @Id 
    private long id; 
    private int fieldInt; 
    private long fieldLong; 
    private String fieldString; 
} 

szukam po tutoriali JPA. Potrafię zrozumieć podstawowe pojęcia, ale we wszystkich tutorialach, które dodały, to można serializować. Jaki jest tego cel? Jak to mi pomaga? Wszelkie sugestie, proszę?

+0

Jest to albo dupe od (http [Tabela Klasy Do Hibernate muszą być Serializable?]: // stackoverflow.com/questions/2726300/do-hibernate-table-classes-need-to-be-serializable) lub, jeśli nie jest to pytanie specyficzne dla Hibernate/JPA, powielenie [What is object serialization?] (http: // stackoverflow. com/questions/447898/serializacja co-jest-obiektowa). W obu przypadkach jest to dupek :) –

+0

Edytowałem tagi. Usunięto "jpa" i "hibernacja" i dodano "serializację". – pakore

+0

@pascal: przepraszam, jestem nowicjuszem. Teraz się uczę. W przyszłości z pewnością tego uniknę. –

Odpowiedz

23

Oznacza to, że klasa może być w odcinkach. Oznacza to, że można go przekonwertować na strumień 0 i 1 i wysłać do innej usługi, takiej jak usługa sieciowa i ORM (hibernacja) lub cokolwiek innego. Wtedy ta usługa wie, w jaki sposób przechowywać strumień.

Twój program może również otrzymać klasę serializowaną i utworzyć dla niej instancję ze strumienia 0 i 1.

Jest to sposób na "zapisywanie" wystąpień klas i "przywracanie" ich w dowolnym momencie.

Więcej informacji na

Aby móc dokonać klasy serializacji, trzeba zaimplementować interfejs "Serializable".

  • Dlaczego tak? Ponieważ gdy nadejdzie moment serializacji klasy, funkcja writeObtject zostanie wywołana w celu przekonwertowania obiektu na bajty. Z drugiej strony, gdy masz bajty i chcesz uzyskać instancję klasy, zostanie wywołana funkcja readObject.

  • Dlaczego nie jest automatyczny? Zmienna wartość jest już reprezentowana przez bajty. Ponieważ problem występuje na przykład wtedy, gdy klasa zawiera instancje innych klas. Co robisz? Kolejne klasy są również inne klasy? Po prostu zachowujesz adres referencyjny? Jest to dość skomplikowane i może zależeć od rodzaju projektu i projektu.

+0

@pokore thanks i understand well. Co to oznacza: @GeneratedValue (strategy = GenerationType.AUTO)? czy to dla automatycznego przyrostu ID. –

+1

@Weed :-) To jest zupełnie inne pytanie. –

+1

Aby wyjaśnić dalej, punktem interfejsu jest oznaczenie klas, które mogą być serializowane. Na przykład nie ma sensu serializować gniazda sieci na żywo, więc nie jest oznaczone jako serializowalne. –

1

Serializowalne klasy mogą być przekształcane do postaci szeregowej - konwertowane na bajty w celu przechowywania na dysku twardym lub przesyłania przez sieć.

+0

@fridley dzięki za wyjaśnienie. –