CREATE TABLE user (
id INT(11) NOT NULL AUTO_INCREMENT PRIMARY KEY,
name VARCHAR(100) NOT NULL DEFAULT '',
age INT,
photo BLOB, -- 二進位資料:圖片、檔案
resume TEXT -- 大量文字:履歷、文章(MySQL 用 TEXT 對應 Clob)
);
-- 大檔案建議用 MEDIUMBLOB / LONGBLOB
public class User {
private Integer id;
private String name;
private Integer age;
private Blob photo;
private Clob resume;
// getter/setter ...
}
<property name="photo" column="photo" type="java.sql.Blob"/>
<property name="resume" column="resume" type="java.sql.Clob"/>
儲存:
FileInputStream fis = new FileInputStream("c:\\sunset.jpg");
Blob photo = Hibernate.createBlob(fis); // 從 InputStream 建立 Blob
Clob resume = Hibernate.createClob("履歷文字內容..."); // 從 String 建立 Clob
User user = new User();
user.setName("shenbin");
user.setAge(28);
user.setPhoto(photo);
user.setResume(resume);
session.save(user);
讀取:
User user = (User) session.load(User.class, 1);
// Clob 讀取
String text = user.getResume().getSubString(1, (int) user.getResume().length());
// Blob 讀取並存檔
InputStream is = user.getPhoto().getBinaryStream();
FileOutputStream fos = new FileOutputStream("c:\\sunset_save.jpg");
byte[] buf = new byte[1024];
int len;
while ((len = is.read(buf)) != -1) {
fos.write(buf, 0, len);
}
is.close(); fos.close();
BLOB/TEXT 直接支援,上述代碼即可運作。BLOB/CLOB 操作較複雜,需透過 oracle.sql.BLOB、DBMS_LOB 套件,且常需在交易中處理。建議參考專門的 Oracle 大物件處理文件。BYTEA / TEXT,Hibernate 映射類型為 binary / text 或 materialized_blob / materialized_clob。@Lob 註解(JPA)可簡化映射,Hibernate 自動對應 Blob/Clob。