考虑以下类结构:
@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。
答案 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字段。