Reputation: 13753
When should I use @javax.persistence.Lob
annotation in JPA? What datatypes can be annotated by this annotation?
Upvotes: 68
Views: 68619
Reputation: 8552
@javax.persistence.Lob
signifies that the annotated field should be represented as BLOB (binary data) in the database.
You can annotate any Serializable
data type with this annotation.
In JPA, upon persisting (retrieval) the field content will be serialized (deserialized) using standard Java serialization.
Common use of @Lob
is to annotate a HashMap
field inside your Entity to store some of the object properties which are not mapped into database columns. That way, all the unmapped values can be stored in the database in one column in their binary representation.
Of course, the price that is paid is that, as they are stored in binary format, they are not searchable using the JPQL/SQL.
Upvotes: 73
Reputation: 51
In my JPA + mysql test, java entity class field annotated with @Lob will generated longtext
mysql column by auto ddl.
Upvotes: 3
Reputation: 283
According to: https://docs.oracle.com/javaee/7/api/javax/persistence/Lob.html
@Lob Specifies that a persistent property or field should be persisted as a large object to a database-supported large object type.
@javax.persistence.Lob signifies that the annotated field should be represented as BLOB (binary data) in the DataBase.
I suppose in database it could be not only binary data but character-based. As we could have BLOB and CLOB. Here's examples in java code:
@Lob
@Column(name = "CHARS", columnDefinition = "CLOB")
private String chars;`
@Lob
@Basic(fetch = FetchType.LAZY)
@Column(name = "DATA", columnDefinition = "BLOB", nullable = false)
private byte[] data;
Upvotes: 27