Oracle
 sql >> Cơ Sở Dữ Liệu >  >> RDS >> Oracle

Cách duy trì LARGE BLOBs (> 100MB) trong Oracle bằng Hibernate

Tôi đã gặp vấn đề tương tự như bạn khi cố gắng lập bản đồ bằng loại "blob". Đây là liên kết đến bài đăng tôi đã thực hiện trên trang web ngủ đông:https://forum.hibernate.org/viewtopic.php?p=2452481#p2452481

Hibernate 3.6.9
Oracle Driver 11.2.0.2.0
Cơ sở dữ liệu Oracle 11.2.0.2.0

Để khắc phục sự cố, tôi đã sử dụng mã có Kiểu người dùng tùy chỉnh cho Blob, tôi có kiểu trả về là java.sql.Blob.

Dưới đây là các triển khai phương pháp chính của UserType này:

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. Cài đặt để xem phần thời gian với ngày trong nhà phát triển Oracle PL / SQL là gì?

  2. Oracle PL / SQL lấy IP v4 của máy chủ?

  3. trình tự tiên tri ngủ đông tạo ra khoảng cách lớn

  4. Hàm NLS_LOWER () trong Oracle

  5. Cách xử lý giây nhuận trong Oracle