主题 : hibernate中POJO一定要实现Serializable接口吗?这样做的目的是什么?

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

 

jacob2006年08月23日 14:13
其实实现不实现要根据你的需求而定,有些时候主要是为了能够让代码有更好的适应性。hibernate虽然不需要序列化,但是可能在其他环境下是需要的

 

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

 

qiuliang_csu2006年08月23日 20:01
lbdl得解释令人豁然开朗,谢谢!
请问:对于serialVersionUID我全部设置成为1L有没有影响?
其次我问一下序列化是不是需要额外得代价?

 

wbgqm2006年08月26日 21:10
楼主,正确的解释应该是这样的:

Notice our POJO class implements the java.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。

希望lbdl斑竹的解释不要误导大家

 

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

楼上:java中看到Serialization的第一个反应就应该持久化,网络传输。Hibernate只是一个ORM工具而已,它的POJO用到Serialization自然也是要一样的原因。学东西,要打好基础,要不维书,不维工具,有了基础什么都不怕,不要照本宣科,只知其一,不知其二;知其表,不知其根本。

送上两个链接给楼上的补补基础吧:
1. javaSerialization基础 : http://www.chinaunix.net/jh/26/395684.html
2. Hibernate serialization : http://java.chinaitlab.com/Hibernate/31609.html

 

lbdl2006年08月28日 16:37
The class should implement Serializable. Strictly speaking, this is not a requirement. However, in practice you will normally want your Hibernate objects to be serializable so that they can be (potentially) migrated around a multiprocessor cluster or saved and restored across a web server reboot etc.

 

jdbc2006年08月28日 20:58
对,如果Hibernate的POJO要在分布式环境下进行传递的话,也必须要Serialization的

 

wbgqm2006年08月30日 01:01
多谢lbdl斑竹提供的链接,不过你早干什么去了?以后解释问题的时候要解释清楚,不要别人一激你再去google

 

cao_wang2006年08月30日 17:03
补充一下。
分布式环境主要是要将Object转成binary然后在中间件中传输。如:
DB - Hibernate - Application Server - Application。
举个简单例子,要在EJB里用hibernate就必须Serialization,否则传不过去。
但如果没有Application Server就不需要Serialization了。如:
DB - Hibernate - Application。
但要澄清一下:
A   DB - Hibernate - Servlet 用到AS,但Object直接传POJO对象,不需要 序列化

其实Hibernate本身跟序列化没有什么关系的。序列化重要是为了将Object转成binary。如果你用ObjectInputStream做个例子就知道了。
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值