【问题标题】:Deserialize object from database (Java/Hibernate)从数据库中反序列化对象(Java/Hibernate)
【发布时间】:2011-04-25 23:45:40
【问题描述】:

我有一个 MS 2000 数据库,供我们的主要 Java 应用程序使用。该应用程序有一个类(我们称之为“汽车”),它被序列化并使用 Hibernate3 作为表中的单个字段放入数据库中。它在 Hibernate 中具有默认设置,并且在 .hbm.xml 映射文件中只有一个“序列化”属性。据我所知。是在一个不同的项目中,我没有参与,所以不太了解,但是可以获取源代码。无论如何,我正在做第二个项目,该项目需要从数据库中读取/使用这个序列化数据。如何从不使用 Hibernate 的其他应用程序反序列化它?我想知道如何使用 POJO 来访问汽车类属性和数据?由于 Hibernate 目前是对其进行序列化的过程,因此有什么特别需要做的吗?或者我可以将返回的数据集放入一个字节数组并将其转换为 car - 前提是我的 car 类与序列化它的其他 java 应用程序的 car 类的源代码相同? TIA

【问题讨论】:

  • 你试过反序列化吗?成功了吗?
  • 是的,我做到了,但没有。否则我不会问。
  • Hibernate 不只是为此使用常规的 Java 序列化吗? “它不起作用”是什么意思 - 异常/错误消息等是什么?
  • 你有什么线索吗?堆栈跟踪?代码?如果没有,您可能不会得到更好的答案。
  • 顺便说一句,你会惊讶于有多少人在没有做显而易见的事情的情况下提出问题......比如自己尝试或阅读 javadocs。

标签: java hibernate serialization deserialization


【解决方案1】:

您需要使用 java.io.ObjectInputStream() 从数据库中读取序列化的字节数据。另一个关键是类路径中的类文件(即 jar 文件或 .class 文件)与存储在数据库中的对象的相同版本匹配。

如果您尝试此操作并遇到错误,您应该编辑当前帖子以提供代码和错误消息,或发布新问题以处理您在反序列化数据时遇到的任何特定问题。

【讨论】:

  • 谢谢。这是帮助的修订评论。我使用的是来自 SCM 的开发代码,但是存储在 db 中的项目使用了 prod 中的旧版本,并且两者不兼容。我以为我在做完全错误的事情,但所有的 cmets 我都在正确的轨道上,只是错过了这一小块。
【解决方案2】:

我看不出为什么按照你的建议去做是行不通的。

但是,这似乎是一种老套且脆弱的方法。事实上,使用 Java 序列化/反序列化本质上是脆弱的......如果您需要更改正在序列化的类的闭包。

【讨论】:

    猜你喜欢
    • 2013-01-23
    • 1970-01-01
    • 2021-10-01
    • 1970-01-01
    • 1970-01-01
    • 2017-08-02
    • 2011-08-23
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多