2010-09-20 224 views
10

可能重复:
Do Hibernate table classes need to be Serializable?
What does Serializable mean?什么是可序列化?这是什么意思?

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

我JPA教程照顾。我能够理解基本概念,但是在他们添加的所有教程中,这个可序列化的。这样做的目的是什么?这对我有什么帮助? 有什么建议吗?

+0

这可能是一个欺骗(HTTP [待办事项休眠表类需要被序列化?]://计算器。如果不是Hibernate/JPA特定的问题,可以使用[什么是对象序列化?](http:// stackoverflow。com/questions/2726300/do-hibernate-table-classes-need-to-serializable) COM /问题/ 447898 /什么,是对象序列化)。在这两种情况下,这是一个愚蠢的:) – 2010-09-20 16:37:41

+0

我编辑了标签。删除了“jpa”和“hibernate”并添加了“序列化”。 – pakore 2010-09-20 16:39:59

+0

@pascal:对不起,我是一个新手。我现在正在学习。我将来肯定会避免这种情况。 – 2010-09-20 16:42:12

回答

23

这意味着类可以被序列化。这意味着它可以被转换为0和1的流,并被发送到其他服务,如web服务或ORM(休眠)或其他服务。然后这个服务知道如何存储流。另外,你的程序可以接收一个序列化的类,并从0和1的流中为它创建一个实例。

这是“保存”类的实例并在任何其他时刻“恢复”它们的方法。

更多信息以

为了能够使一个类可序列化,你必须实现的接口 “序列化”。

  • 为什么这么?因为当序列化类的时刻到达时,函数writeObtject将被调用以将对象转换为字节。另一方面,当你有字节并且你想获得类的实例时,函数readObject将被调用。

  • 为什么不是自动的?一个变量值已经由字节表示。因为例如当一个类拥有其他类的实例时就会出现问题。你是做什么?你还序列化其他类?你只是保留参考地址?这非常复杂,它可能取决于您的项目和设计类型。

+0

@ pokore谢谢,我很好理解。这个@GeneratedValue(strategy = GenerationType.AUTO)是什么意思?是否用于自动增加ID。 – 2010-09-20 16:31:21

+1

@weed :-)这是一个完全不同的问题 – 2010-09-20 16:32:30

+1

为了进一步阐明,接口的要点是标记可以明显序列化的类。例如,序列化一个实时网络套接字是没有意义的,所以它没有被标记为可序列化。 – 2010-09-20 16:34:27

1

可序列化类可以被序列化 - 转换成字节存储在硬盘上或通过网络传输。

+0

@fridley感谢您的解释。 – 2010-09-20 16:33:54