分享

转:POJO实现Serializable接口的目的是什么?

 windxn 2018-07-25

hibernate中POJO不实现Serializable接口吗一样可以实现DAO,但是为什么一些经典例子中总是实现这个接口呢?这样做的目的是什么,有什么好处?实现这个接口时serialVersionUID应该怎么设置?


答:
不一定。
搂主知道DTO的概念么?Data transfer Object. 这种对象是用来在网络上(不同的JVM)被传递的对象,比如Servlet调用EJB,而Servlet与EJB不在同一个JVM中,但是却需要在二者之间传递这个对象。
我们知道,不同JVM跨网络传输对象,需要将对象序列化(Serialization)。楼主如果使用Hibernate的POJO如果是需要跨网络传输的此对象(比如Servlet调用一个业务bean,返回了此POJO,而Servlet与业务bean是分布式的),这种情况下,需要Serialization,如果在同一个JVM中调用,可不必序列化。


请问:对于serialVersionUID我全部设置成为1L有没有影响?
其次我问一下序列化是不是需要额外得代价?


楼主,正确的解释应该是这样的:
Notice our POJO class implements thejava.io.Serializable interface. This is required of you want the class to be cached by a second-level caching service.
在Hibernate中,如果你用UserType,则所有的 POJO必须实现java.io.Serializable接口,而CompositeUserType接口则不必实现这个接口,这是因为CompositeUserType接口提供了assemble(...)和disassemble(...)来管理缓冲Cache。

楼上说的只是Hibernate教程上浅层次的Hibernate中的表面意思。
当然,这也是一个方面,这里边之所以要Serialization,为了可以将二级缓存内容做持久化,以便在意外之后可以恢复缓存信息。而如果POJO需要在分布式环境下传递,也是必须Serialization的。

java中看到Serialization的第一个反应就应该持久化,网络传输。Hibernate只是一个ORM工具而已,它的POJO用到Serialization自然也是要一样的原因。

如果Hibernate的POJO要在分布式环境下进行传递的话,也必须要Serialization 的

送上两个链接补补基础吧:
1.javaSerialization基础 :?http://www./jh/26/395684.html?
2. Hibernate serialization :?http://java./Hibernate/31609.html

    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多