Oracle
 sql >> Base de données >  >> RDS >> Oracle

Comment conserver les LARGE BLOBs (> 100 Mo) dans Oracle à l'aide d'Hibernate

J'avais les mêmes problèmes que vous en essayant de mapper en utilisant le type "blob". Voici un lien vers un message que j'ai publié sur le site d'hibernation :https://forum.hibernate.org/viewtopic.php?p=2452481#p2452481

Hibernate 3.6.9
Pilote Oracle 11.2.0.2.0
Base de données Oracle 11.2.0.2.0

Pour résoudre le problème, j'ai utilisé du code qui avait un UserType personnalisé pour le Blob, j'avais le type de retour java.sql.Blob.

Voici les principales implémentations de méthodes de ce type d'utilisateur :

public Object nullSafeGet(ResultSet rs, String[] names, Object owner) throws HibernateException, SQLException {

   Blob blob = rs.getBlob(names[0]);
   if (blob == null)
      return null;

   return blob;
}

public void nullSafeSet(PreparedStatement st, Object value, int index)
     throws HibernateException, SQLException {
   if (value == null) {
      st.setNull(index, sqlTypes()[0]);
   }
   else {
      InputStream in = null;
      OutputStream out = null;
      // oracle.sql.BLOB
      BLOB tempBlob = BLOB.createTemporary(st.getConnection(), true, BLOB.DURATION_SESSION);
      tempBlob.open(BLOB.MODE_READWRITE);
      out = tempBlob.getBinaryOutputStream();
      Blob valueAsBlob = (Blob) value;
      in = valueAsBlob.getBinaryStream();
      StreamUtil.toOutput(in, out);
      out.flush();
      StreamUtil.close(out);
      tempBlob.close();
      st.setBlob(index, tempBlob);
      StreamUtil.close(in);
   }
}