2009-06-02 31 views
27

¿Cómo se anota una columna blob en Hibernate? hasta ahora tengo una clase que tiene:¿Cómo se anota una columna blob en Hibernate?

@Column(name = "FILEIMAGE") 
private byte[ ] fileimage ; 
// 
public byte[ ] getFileimage () { return this.fileimage ; } 
public void setFilename (String filename) { this.filename = filename ; } 

Respuesta

43

@Lob debe hacer el truco para blob y CLOB (uso String como tipo)

@Column(name = "FILEIMAGE") 
@Lob(type = LobType.BLOB) 
private byte[] fileimage; 
+40

dependiendo de la versión de hibernación, la anotación Lob no podría tener ningún parámetro de tipo. cita de [aquí] (https://www.hibernate.org/398.html): @Lob ya no tiene atributos, se adivina el tipo de letra (CLOB, BLOB). Si el tipo subyacente es una Cadena o una matriz de caracteres, se utilizan CLOB. Otros BLOB se utilizan. – Fortega

+0

gracias chicos por sus respuestas rápidas. es la secuencia importante? @Column (name = "FILEIMAGE", length = 1048576) @Lob byte privado [] archivo de imagen; –

+0

@Fortega, el enlace que proporcionó no funciona. – gtiwari333

1

Solía ​​hibernación 4 en JBoss 7 y Java 7 , y descubrí que la columna BLOB en mi tabla no funciona como lo que tengo para hibernar 2. Afortunadamente, lo resolví leyendo soluciones de otras personas. Mi solución:

  1. Tabla en db, la columna aún definida en BLOB; cambiar la asignación de hibernación de type="blob" a type="binary"
  2. En Java captador/definidor, utilizando byte[] en lugar de BLOB (javax.sql)
  3. cambio en el código Java, que obtener y definir esta columna correctamente. Si se trata de InputStram, use byte[] para leer/escribir en la columna BLOB; Si lee desde DB utilizando java.sql.ResultSet, asegúrese de utilizar getBytes() en lugar del método getBlob().
Cuestiones relacionadas