Oracle
 sql >> Baza danych >  >> RDS >> Oracle

Jak utrwalać DUŻE BLOBy (>100 MB) w Oracle przy użyciu Hibernate

Miałem te same problemy, co ty, próbując mapować za pomocą typu „blob”. Oto link do wpisu, który umieściłem na stronie hibernacji:https://forum.hibernate.org/viewtopic.php?p=2452481#p2452481

Hibernacja 3.6.9
Sterownik Oracle 11.2.0.2.0
Baza danych Oracle 11.2.0.2.0

Aby rozwiązać problem, użyłem kodu, który miał niestandardowy UserType dla obiektu Blob, miałem typ zwracany jako java.sql.Blob.

Oto najważniejsze implementacje metod tego typu użytkownika:

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. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Tworzenie globalnej tabeli tymczasowej w Oracle

  2. Uruchomić 2 zapytania jednocześnie w Oracle SQL Developer?

  3. Aktualizuj za pomocą zapytania Join w Oracle

  4. Jak utworzyć tabelę tymczasową w bazie danych Oracle?

  5. Kolejna biała księga Optymalizatora 12c