我有一个不能很好地序列化到关系实体的类.因此,我想使用JPA作为CLOB来保持它(我可以将它序列化为String).我怎么用JPA这样做?
示例实体:
@Entity @Table(name = "MY_TABLE") public class Foo { @Id private Long id; private String simpleString; private Bar bar; }
Bar是我想在MY_TABLE里面坚持作为CLOB的类.
你可以用它来注释字符串javax.persistence.Lob
.
@Lob @Basic(fetch = FetchType.LAZY) private String simpleString;
见Lob
Javadoc:
指定持久属性或字段应作为大对象持久保存到数据库支持的大对象类型.便携式应用程序在映射到数据库Lob类型时应使用Lob注释.当元素集合值是基本类型时,Lob注释可以与
Basic
注释或ElementCollection
注释结合使用.Lob可以是二进制或字符类型.
Lob
类型是从持久字段或属性的类型推断的,除字符串和基于字符的类型外,默认为Blob.
接下来,您可以将Bar
字段设置为transient
不存在:
@Transient private Bar bar
然后在你的Bar
getter中,你可以根据需要对它进行反序列化:
public Bar getBar() { if (this.bar == null) { this.bar = deserialise(this.simpleString); } return this.bar; }
线程安全留给读者练习.
此外,如果您需要在持久化之前立即执行此操作,也可以使用@PrePersist
序列化Bar
为其字符串形式.