我有两台机器:
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中的问题,如此处所述。
答案 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),当您需要按键/外键映射时。