Usando JPA para insertar y recuperar BLOBs

Vamos a escribir una serie de post sobre cómo trabajar con imágenes con tecnologías como JPA y Spring MVC.

Ahí va el primero, que muestra lo sencillo que es trabajar con JPA y BLOBs:

1. En mi entidad JPA añadiré un atributo de tipo byte[]

2. Añadimos la anotación JPA @Lob (y el nombre de columna, si es obligatoria,…):

3. En mi Test unitario escribo el código para cargar Imagen en BD y para leerla y escribirla en disco (omitimos asserts):

Alguien me va a tener que agradecer este post 😀

Respuestas

  1. Hola! Genial tu post muchas gracias.

    Tengo una duda, estoy trabajando con PostgreSQL como Motor, y tengo un campo OID , como puedo hacer para insertar una imagen con jpa?, como debo declarar el field en java?.

    Nota: hice el mapeo con netbeans y el cAmpo imagen me lo declaró de tipo BigInterger.

    Gracias por su ayuda.

    1. No soy un expero en Postgresql, creo que el mapeo correcto es este:

      SQL Java

      TEXT @Lob @Type(type = «org.hibernate.type.TextType») String
      oid @Lob java.sql.Blob
      bytea @Lob @Type(type = «org.hibernate.type.PrimitiveByteArrayBlobType») byte[]

      y En los parámetros JPA:
      hibernate.jdbc.use_streams_for_binary=true

  2. quien es el producto???

  3. @Override
    public void GuardarImagen(Imagenes imagen) throws IOException {
    /*
    JdbcTemplate jdbcTemplate = new JdbcTemplate(dataSource);
    SimpleJdbcCall call = new SimpleJdbcCall(jdbcTemplate)
    .withProcedureName(«INSERTAR_IMAGEN»)
    .declareParameters(
    new SqlParameter(«pcodmatricula»,Types.VARCHAR),
    new SqlParameter(«pfoto»,Types.BLOB)
    );

    Map execute = call.execute(
    new MapSqlParameterSource(«pcodmatricula», imagen.getCodmatricula()) ,
    new MapSqlParameterSource(«pfoto», imagen.getGuardar_foto())
    );*/

    byte[] foto = IOUtils.toByteArray(imagen.getGuardar_foto());
    JdbcTemplate jdbcTemplate = new JdbcTemplate(dataSource);
    jdbcTemplate.update(«INSERT INTO FOTO(CODMATRICULA,FOTO) VALUES (?, ?)»,
    new Object[] {
    imagen.getCodmatricula(),
    new SqlLobValue(foto),
    },
    new int[] {Types.VARCHAR, Types.BLOB});

    }

  4. hola garcías por esto

Deja un comentario