@Javax.persistence.Lob注释在JPA中有什么意义?

时间:2015-04-08 09:42:24

标签: java jpa annotations java-ee-7

我应该何时在JPA中使用@javax.persistence.Lob注释?这种表示法可以注释哪些数据类型?

2 个答案:

答案 0 :(得分:27)

@javax.persistence.Lob表示带注释的字段应在数据库中表示为BLOB(二进制数据)。

您可以使用此批注对任何Serializable数据类型进行批注。 在JPA中,在持久化(检索)后,将使用标准Java序列化对字段内容进行序列化(反序列化)。

@Lob的常见用法是在实体内注释HashMap字段,以存储未映射到数据库列的某些对象属性。这样,所有未映射的值都可以在其二进制表示中的一列中存储在DB中。当然,支付的价格是,因为它们以二进制格式存储,所以它们不能使用JPQL / SQL进行搜索。

答案 1 :(得分:8)

根据:https://docs.oracle.com/javaee/7/api/javax/persistence/Lob.html

@Lob 指定持久属性或字段应作为大对象持久保存到数据库支持的大对象类型。

  

@ javax.persistence.Lob表示带注释的字段应该是   在DataBase中表示为BLOB(二进制数据)。

我想在数据库中它不仅可以是二进制数据,而且可以是基于字符的。 我们可以拥有BLOB和CLOB。以下是java代码中的示例:

@Lob
@Column(name = "CHARS", columnDefinition = "CLOB")
private String chars;`

@Lob
@Basic(fetch = FetchType.LAZY)
@Column(name = "DATA", columnDefinition = "BLOB", nullable = false)
private byte[] data;