首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> Java 程式設計 >> Java 相關知識

Hibernate 註解教程(四):LOB 大對象映射處理

     編輯:Java 相關知識

Java/SQL/Hibernate 類型對應表

Java 類型Hibernate 類型標準 SQL 類型
byte[]binaryVARBINARY、BLOB
StringtextCLOB
java.sql.ClobclobCLOB
java.sql.BlobblobBLOB

@Lob 註解用法

@Lob
public String getC() { return c; }

@Lob
public byte[] getB() { return b; }
  • String、char[]、Character[]、java.sql.Clob → 映射為 CLOB
  • byte[]、Byte[]、Serializable、java.sql.Blob → 映射為 BLOB

數據庫特定類型映射

可用 @Column(columnDefinition="longtext") 指定原生類型(不推薦,降低可移植性)。

MySQL 示例:無 @Lob 時 byte[] 映射為 TINYBLOB (256B);加 @Lob 映射為 LONGBLOB (4GB)。

LOB 存取代碼示例

存入圖片

BufferedInputStream in = new BufferedInputStream(new FileInputStream("d:\\19204.jpg"));
byte[] b = new byte[in.available()];
in.read(b);
bean.setB(b);
in.close();

讀取圖片

Session session = HibernateSessionFactory.getSession();
User user = (User)session.get(User.class, 1);
byte[] b = user.getB();
BufferedOutputStream out = new BufferedOutputStream(new FileOutputStream("d:\\192041.jpg"));
out.write(b);
out.close();

最佳實踐

  • 優先使用 @Lob 保證跨數據庫兼容性
  • 大文件建議使用流式處理避免 OOM
  • 字符大對象可直接按 String 操作
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved