【问题标题】:Do Hibernate table classes need to be Serializable?Hibernate 表类是否需要可序列化?
【发布时间】:2011-02-13 03:42:18
【问题描述】:

我继承了一个使用 Hibernate 3.0 连接到 SQL Server 数据库的 Websphere Portal 项目。

这个项目中大约有 130 个 Hibernate 表类。它们都实现了可序列化。它们都没有声明 serialVersionUID 字段,因此 Eclipse IDE 显示所有这些类的警告。

这些类是否真的需要实现 Serializable?
如果是这样,是否有任何工具可以一次将生成的 serialVersionUID 字段添加到大量类中(只是为了使警告消失)?

【问题讨论】:

标签: java hibernate orm serializable


【解决方案1】:

这些类是否真的需要实现 Serializable?

JPA 规范 (JSR 220) 很好地总结了它(同样适用于 Hibernate):

2.1 实体类要求

(...)

如果将实体实例作为分离对象按值传递(例如,通过远程接口),则实体类必须实现Serializable 接口。

因此,严格来说,这不是必需的,除非您需要将分离的实体通过线路发送到另一层、迁移到另一个集群节点、存储在 HTTP 会话中等。

如果是这样,有没有工具可以一次将生成的serialVersionUID字段添加到大量类中

我认为您可以使用 Serial version (Ant) Tasks 进行批处理。

【讨论】:

  • 我认为这个答案是最有用的。我选择让这些类可序列化,因为我还不了解所有代码并且不确定可以用它们做什么。我可能会禁用警告。
  • 换句话说,被引用的规范说,'如果它需要可序列化(出于 Hibernate 以外的原因),它需要可序列化'。典型的 Hibernate 用法不涉及 Serializable。
【解决方案2】:

Hibernate 根本不需要可序列化。

【讨论】:

    【解决方案3】:

    Eclipse 的“Clean Up”命令可以做到这一点。但是,它还有更多功能,因此在将其用于整个包之前对其进行测试并优化清理和格式设置。

    【讨论】:

      【解决方案4】:

      我不熟悉可以为一堆类自动执行此操作的工具,尽管您可以编写一个脚本。

      如果您使用 Eclipse 机械地执行此操作,则每节课花费的时间不应超过 4-5 秒,这可能仍然比脚本更快。

      【讨论】:

        【解决方案5】:

        如果是这样,是否有任何工具可以一次将生成的 serialVersionUID 字段添加到大量类(只是为了让警告消失)?

        您可以在 Eclipse 的编译器设置中禁用此警告 - 无论是针对项目还是整个工作区。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 2013-10-31
          • 1970-01-01
          • 2010-10-29
          • 2011-05-10
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多