7

我已经阅读了一些关于休眠和实体序列化的主题,但仍然无法理解为什么我的应用程序可以工作,尽管事实上我没有实现 Serializable。

“如果一个实体实例作为一个分离的对象通过值传递,例如通过会话 bean 的远程业务接口,则该类必须实现 Serializable 接口。” (C)

我所拥有的: 使用 Hibernate 的简单 Spring MVC 项目。我有 MyEntity 数据表,以及用户从我的应用程序中编辑它的功能。

  • 用户向 getMyEntity() 发出请求,并获得空的 MyEntity 对象
  • 然后在表单中设置所有需要的参数

  • 然后将更新的 myEntity 发送到服务器

问题是什么: 据我了解,用户在填写表单时将拥有一个 myEntity 对象。因此,myEntity 处于分离状态。但是,MyEntity 没有实现 Serializable

我的问题:

  • 为什么它在没有 MyEntity 实现 Serializable 的情况下工作?

  • 我的所有实体都有相同的方案(如上所述)。我需要实现可序列化吗?

4

2 回答 2

9

Hibernate 不需要实体是Serializable.

“如果一个实体实例作为一个分离的对象通过值传递,例如通过会话 bean 的远程业务接口,则该类必须实现 Serializable 接口。” (C)

这个声明是一个常见的混淆来源,因为它与 Hibernate 无关。实际上,这意味着如果您计划在需要可序列化的上下文中使用您的实体,它们应该是Serializable.

由于 Spring MVC 也不需要模型属性Serializable(除非您想利用session 持久性来存储在 session using 中的属性@SessionAttributes),因此您无需担心您的案例中的可序列化性。

于 2013-09-11T13:05:26.783 回答
1

为什么它在没有 MyEntity 实现 Serializable 的情况下工作?

Hibernate 不需要 Entity 被序列化。仅当您要通过线路发送分离的对象时才需要(例如,远程接口)

我的所有实体都有相同的方案(如上所述)。我需要实现可序列化吗?

是的,如果您想通过电线发送此对象。否则没有。

于 2013-09-11T13:04:10.740 回答