hibernate 对象为何须要实现 Serializable接口

注意区分持久化和序列化,持久化是把对象中的信息转换为数据库中的表来存储;序列化是将对象(java对象)直接变成字符串等流,存储到硬盘上,不涉及数据库表。java

序列化的目的主要是方便直接传输对象,而不是每次都要链接数据库表。数据库

hibernate 有两种缓存。其中,一级缓存为 session级别,一般由内存管理。二级缓存是 sessionFactory级别,存储介质能够是内存或硬盘。对于二级缓存,若是将对象写进硬盘,就必须序列化,以及兼容对象在网络中的传输 等等。缓存

java中常见的几个类(如:Interger、String等),都实现了java.io.Serializable接口。服务器

实现 java.io.Serializable 接口的类是可序列化的。没有实现此接口的类将不能使它们的任一状态被序列化或逆序列化。序列化类的全部子类自己都是可序列化的。这个序列化接口没有任何方法和域,仅用于标识序列化的语意。网络

确切的说应该是对象的序列化,通常程序在运行时,产生对象,这些对象随着程序的中止运行而消失,但若是咱们想把某些对象(由于是对象,因此有各自 不一样的特性)保存下来,在程序终止运行后,这些对象仍然存在,能够在程序再次运行时读取这些对象的值,或者在其余程序中利用这些保存下来的对象。这种状况 下就要用到对象的序列化。session

只有序列化的对象才能够存储在存储设备上。为了对象的序列化而须要继承的接口也只是一个象征性的接口而已,也就是说继承这个接口说明这个对象能够 被序列化了,没有其余的目的。之因此须要对象序列化,是由于有时候对象须要在网络上传输,传输的时候须要这种序列化处理,从服务器硬盘上把序列化的对象取 出,而后经过网络传到客户端,再由客户端把序列化的对象读入内存,执行相应的处理。分布式

将二级缓存中的内容持久化保存下来,便于恢复缓存的信息,hibernate的缓存机制经过使用序列化,判定应该是基于序列化的缓存,如没有 serializable接口,在序列化时,使用objectOutputStream的write(object)方法将对象保存到文件时将会出现异常。.net

Hibernate并不要求持久化类必须实现Java.io.Serializable接口,可是对于采用分布式结构的Java应用,当Java对象在不一样的进程节点之间传输时,这个对象所属的类必须实现Serializable接口,此外,在Java Web应用中,若是但愿对HttpSession中存放的Java对象进行持久化,那么这个Java对象所属的类也必须实现Serializable接口。hibernate

相关文章
相关标签/搜索