Каково значение аннотации @javax.persistence.Lob в JPA?

Когда я должен использовать аннотацию @javax.persistence.Lob в JPA? Какие типы данных могут быть аннотированы этой аннотацией?

Ответ 1

@javax.persistence.Lob означает, что аннотированное поле должно быть представлено как BLOB (двоичные данные) в базе данных.

Вы можете аннотировать любой Serializable тип данных этой аннотацией. В JPA после сохранения (извлечения) содержимое поля будет сериализовано (десериализовано) с использованием стандартной сериализации Java.

Обычно @Lob используется для аннотирования поля HashMap внутри вашей сущности для хранения некоторых свойств объекта, которые не отображаются в столбцах БД. Таким образом, все несопоставленные значения могут храниться в БД в одном столбце в их двоичном представлении. Конечно, заплаченная цена состоит в том, что, поскольку они хранятся в двоичном формате, они не доступны для поиска с использованием JPQL/SQL.

Ответ 2

Согласно: 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;