Когда я должен использовать аннотацию @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;