sql >> Database >  >> RDS >> Oracle

Hoe GROTE BLOB's (> 100 MB) in Oracle te behouden met Hibernate

Ik had dezelfde problemen als jij bij het proberen in kaart te brengen met het type "blob". Hier is een link naar een bericht dat ik op de hibernate-site heb geplaatst:https://forum.hibernate.org/viewtopic.php?p=2452481#p2452481

Slaapstand 3.6.9
Oracle Driver 11.2.0.2.0
Oracle Database 11.2.0.2.0

Om het probleem op te lossen, gebruikte ik code met een aangepast gebruikerstype voor de Blob, ik had het retourtype java.sql.Blob.

Hier zijn de belangrijkste methode-implementaties van dit UserType:

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);
   }
}


  1. Oracle Streams stap voor stap replicatievoorbeeld

  2. Archiver opgehangen vanwege COMPATIBELE ORA-16484

  3. T-SQL Tuesday #67:Nieuwe back-up en herstel van uitgebreide gebeurtenissen

  4. Wat is reeks in orakel