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