sql >> Databasteknik >  >> RDS >> Oracle

Hur man behåller STORA BLOB (>100MB) i Oracle med Hibernate

Jag hade samma problem som du när jag försökte kartlägga med typen "blob". Här är en länk till ett inlägg som jag gjorde på hibernate-webbplatsen: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

För att åtgärda problemet använde jag kod som hade en anpassad UserType för Blob, jag hade returtypen java.sql.Blob.

Här är de viktigaste implementeringarna av denna 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. Förstå "tid" lagringsstorlek i SQL Server

  2. Använda index i SQL Server-minnesoptimerade tabeller

  3. Vad är syftet med att använda OPTION(MAXDOP 1) i SQL Server?

  4. SQL Server 2005 ROW_NUMBER() utan ORDER BY