0

我有两台机器:

A) Windows XP、JDK 1.7.45 B) Windows Server 2003、JDK 1.7.45

在机器中,AI 可以成功地将对象序列化到文件系统及其子系统并反序列化。

在机器 B 中,当我反序列化时,子对象丢失了。在任何阶段都不会抛出异常。

如果我将序列化文件从 A 复制到 B,则 B 中的反序列化会很好地创建子对象。

这表明B中的序列化存在问题。

非常简单的对象不会发生此问题。但是,当我使用带有 JPA 注释的对象时,就会出现问题。

@Entity
@Table(name="...")
@NamedQuery(name="Category.findAll", query="SELECT c FROM Category c")
public class Category implements Serializable {
private static final long serialVersionUID = 1L;

@Id
@Column(name="...")
private long id;
    @Transient
    private List<Category> subCategories; //These go missing
...
}

此问题仅发生在某些而非所有 JPA 实体类中。

知道可能是什么原因造成的吗?JPA 实体可以无问题地序列化吗?我的最终目标是在 Couchbase 中缓存 JPA 实体。这在 A 中有效,但在 B 中失败。即使是简单的基于磁盘的序列化在 B 中也存在问题,如此处所述。

4

2 回答 2

1

这是适合您的工具:

EclipseLink MOXy 是 JAXB (JSR-222) 规范的实现。由于 EclipseLink 还提供了 JPA 实现,它的许多扩展都旨在映射 JPA 实体:

@XmlInverseReference 支持双向关系(参见:http ://blog.bdoughan.com/2010/07/jpa-entities-to-xml-bidirectional.html )

@XmlPath 用于映射嵌入式 ID(参见:http ://blog.bdoughan.com/2010/07/xpath-based-mapping.html )。

@XmlJoinNodes(类似于 JPA 的 @JoinColumns)当您需要按键/外键进行映射时。

于 2013-10-21T21:01:33.233 回答
1

没有什么可以阻止您序列化 JPA 实体,毕竟它们是 POJO。但是可能发生的情况是,当您尝试反序列化它时,您不能,因为在另一个 JVM 中,它在类路径中没有 JPA 注释。无论如何,它应该抛出一个异常,所以重新检查你的日志。

于 2013-10-21T16:37:48.503 回答