将实体类保存为序列化字段

时间:2014-01-22 09:49:09

标签: java jpa eclipselink

考虑以下类结构:

@Entity
public class A {}

@Entity 
public class B {}

public class SubA extends A
{
   private B b;
}

我想将SubA实例持久保存到数据库中,但JPA检测到成员b是一个实体,并要求我相应地对其进行注释(@OneToOne(cascade = CascadeType.PERSIST))。

我想将成员b视为普通的序列化字段而不是实体,即保存实例的“快照”而不是对B的相应记录的引用。

我当然可以序列化B我自己的实例并将其保存为字节数组,但我希望有一个更优雅的解决方案内置JPA。

2 个答案:

答案 0 :(得分:0)

也许您可以将SubA实例序列化为例如JSON并将其作为文本存储在数据库中,并将其解析回对象。 如果使用EclipseLink,则可以为此目的实现转换器类,并且该过程将自动执行。 http://eclipse.org/eclipselink/documentation/2.4/jpa/extensions/a_converter.htm

在JPA 2.1提供程序中,有用于此目的的标准注释/接口。

答案 1 :(得分:0)

如果B不可序列化,则可能会发生错误,但您应该能够将'b'属性指定为基本映射: http://en.wikibooks.org/wiki/Java_Persistence/Basic_Attributes#Basics

这将使它将序列化为A表中的blob字段。