¿Cuál es el significado de la anotación @ javax.persistence.Lob en JPA?
@lob hibernate (2)
¿Cuándo debería usar la anotación @javax.persistence.Lob
en JPA? ¿Qué tipos de datos pueden ser anotados por esta anotación?
@javax.persistence.Lob
significa que el campo anotado se debe representar como BLOB (datos binarios) en la Base de Datos.
Puede anotar cualquier tipo de datos serializable
con esta anotación. En JPA, al persistir (recuperación), el contenido del campo se serializará (deserializará) utilizando la serialización Java estándar.
El uso común de LOB es anotar un campo HashMap
dentro de su Entidad para almacenar algunas de las propiedades del objeto que no están mapeadas en las columnas de DB. De esta forma, todos los valores no asignados se pueden almacenar en la base de datos en una columna en su representación binaria. Por supuesto, el precio que se paga es que, como se almacenan en formato binario, no se pueden buscar utilizando el JPQL / SQL.
De acuerdo con: https://docs.oracle.com/javaee/7/api/javax/persistence/Lob.html
@Lob Especifica que una propiedad o campo persistente debe persistir como un objeto grande para un tipo de objeto grande admitido por la base de datos.
@ javax.persistence.Lob significa que el campo anotado se debe representar como BLOB (datos binarios) en la Base de Datos.
Supongo que en la base de datos podría ser no solo datos binarios sino basados en caracteres. Como podríamos tener BLOB y CLOB. Aquí hay ejemplos en código 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;