web-dev-qa-db-fra.com

Quelle est la signification de l'annotation @ javax.persistence.Lob dans JPA?

Quand dois-je utiliser @javax.persistence.Lob annotation dans JPA? Quels types de données peuvent être annotés par cette annotation?

25
dev ツ

@javax.persistence.Lob signifie que le champ annoté doit être représenté comme BLOB (données binaires) dans la base de données.

Vous pouvez annoter n'importe quel type de données Serializable avec cette annotation. Dans JPA, lors de la persistance (récupération), le contenu du champ sera sérialisé (désérialisé) en utilisant la sérialisation standard Java Java).

Utilisation courante de @Lob consiste à annoter un champ HashMap à l'intérieur de votre entité pour stocker certaines des propriétés d'objet qui ne sont pas mappées dans des colonnes de base de données. De cette façon, toutes les valeurs non mappées peuvent être stockées dans la base de données dans une colonne dans leur représentation binarisée. Bien sûr, le prix payé est que, comme ils sont stockés au format binaire, ils ne sont pas consultables à l'aide de JPQL/SQL.

29
Zielu

Selon: https://docs.Oracle.com/javaee/7/api/javax/persistence/Lob.html

@ Lob Spécifie qu'une propriété ou un champ persistant doit être conservé en tant qu'objet volumineux dans un type d'objet volumineux pris en charge par la base de données.

@ javax.persistence.Lob signifie que le champ annoté doit être représenté comme BLOB (données binaires) dans la base de données.

Je suppose que dans la base de données, il pourrait s'agir non seulement de données binaires, mais également de caractères. Comme nous pourrions avoir BLOB et CLOB. Voici des exemples dans 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;
11
levrun