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

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


person Dev    schedule 08.04.2015    source источник


Ответы (2)


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

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

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

person Zielu    schedule 08.04.2015
comment
Можем ли мы использовать @Lob для вставки некоторых данных (какая-то строка с большим количеством изображений)? - person Lahiru Gamage; 15.02.2018

Согласно: 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;
person levrun    schedule 28.07.2016
comment
Ленивый тип выборки в этом случае не работает, потому что вы используете byte[] для хранения своих данных. - person Mr.Q; 30.12.2018
comment
Это верно! @Lob используется для отображения Binary ИЛИ large character objects! - person CodeSlave; 21.11.2019