【发布时间】:2015-06-13 04:53:06
【问题描述】:
什么时候应该在 JPA 中使用 @javax.persistence.Lob 注释?这个注解可以注解哪些数据类型?
【问题讨论】:
标签: java jpa annotations java-ee-7
什么时候应该在 JPA 中使用 @javax.persistence.Lob 注释?这个注解可以注解哪些数据类型?
【问题讨论】:
标签: java jpa annotations java-ee-7
@javax.persistence.Lob 表示带注释的字段应在数据库中表示为 BLOB(二进制数据)。
您可以使用此注解来注解任何Serializable 数据类型。
在 JPA 中,在持久化(检索)后,字段内容将使用标准 Java 序列化进行序列化(反序列化)。
@Lob 的常见用途是在 Entity 中注释 HashMap 字段以存储一些未映射到 DB 列的对象属性。这样,所有未映射的值都可以以二进制表示形式存储在数据库中的一列中。当然,付出的代价是,由于它们以二进制格式存储,因此无法使用 JPQL/SQL 进行搜索。
【讨论】:
@Lob 有意义吗?当人们说“支持大型对象”时,我不明白幕后发生了什么。 @Zeilu
根据:https://docs.oracle.com/javaee/7/api/javax/persistence/Lob.html
@Lob 指定持久属性或字段应作为大对象持久保存到数据库支持的大对象类型。
@javax.persistence.Lob 表示注释字段应该是 在数据库中表示为 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;
【讨论】:
@Lob 用于映射Binary OR large character objects!
@Lob 有意义吗?当人们说“支持大型对象”时,我不明白幕后发生了什么。 @levrun