sql >> Databáze >  >> RDS >> Oracle

Jak zachovat VELKÉ BLOBy (>100 MB) v Oracle pomocí Hibernate

Měl jsem stejné problémy jako vy při pokusu o mapování pomocí typu „blob“. Zde je odkaz na příspěvek, který jsem vytvořil na webu hibernace:https://forum.hibernate.org/viewtopic.php?p=2452481#p2452481

Hibernate 3.6.9
Oracle Driver 11.2.0.2.0
Oracle Database 11.2.0.2.0

K vyřešení problému jsem použil kód, který měl vlastní UserType pro objekt Blob, měl jsem návratový typ java.sql.Blob.

Zde jsou implementace klíčových metod tohoto 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. Počítání počtu výskytů podřetězce v řetězci v PostgreSQL

  2. SQLite FULL OUTER JOIN emulace

  3. Použití ODBC se Salesforce a Active Directory Federation Services (ADFS) Single Sign On (SSO)

  4. Připojení Visual COBOL k MySQL