JPA实体可以序列化到磁盘吗?

时间:2013-10-21 16:21:38

标签: java jpa serialization couchbase

我有两台机器:

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

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

在机器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中的问题,如此处所述。

2 个答案:

答案 0 :(得分:1)

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

答案 1 :(得分: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),当您需要按键/外键映射时。