gpt4 book ai didi

java - 如何将 JPA 字段持久化为 clob?

转载 作者:行者123 更新时间:2023-11-29 06:55:50 29 4
gpt4 key购买 nike

我有一个不能很好地序列化为关系实体的类。因此,我想使用 JPA 作为 CLOB 来保存它(我可以将它序列化为字符串)。我将如何使用 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 Java文档:

Specifies that a persistent property or field should be persisted as a large object to a database-supported large object type. Portable applications should use the Lob annotation when mapping to a database Lob type. The Lob annotation may be used in conjunction with the Basic annotation or the ElementCollection annotation when the element collection value is of basic type. A Lob may be either a binary or character type.

The Lob type is inferred from the type of the persistent field or property, and except for string and character-based types defaults to 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 序列化为字符串形式。

关于java - 如何将 JPA 字段持久化为 clob?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34478189/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com