hibernate 大对象类型的hibernate映射
时间:2014-05-31 23:03:24
收藏:0
阅读:574
基本知识:
- 在 Java 中, java.lang.String 可用于表示长字符串(长度超过 255), 字节数组 byte[] 可用于存放图片或文件的二进制数据. 此外, 在 JDBC API 中还提供了 java.sql.Clob 和 java.sql.Blob 类型, 它们分别和标准 SQL 中的 CLOB 和 BLOB 类型对应. CLOB 表示字符串大对象(Character Large Object), BLOB表示二进制对象(Binary
Large Object)
- Mysql 不支持标准 SQL 的 CLOB 类型, 在 Mysql 中, 用 TEXT, MEDIUMTEXT 及 LONGTEXT 类型来表示长度操作 255 的长文本数据
- 在持久化类中, 二进制大对象可以声明为 byte[] 或 java.sql.Blob 类型; 字符串可以声明为 java.lang.String 或 java.sql.Clob
- 实际上在 Java 应用程序中处理长度超过 255 的字符串, 使用 java.lang.String 比 java.sql.Clob 更方便
如何映射?
若希望精确映射sql类型,可以使用sql-type属性,例如:
<!-- 映射大对象 -->
<!-- 若希望精确映射 SQL 类型, 可以使用 sql-type 属性. -->
<property name="content">
<column name="CONTENT" sql-type="mediumtext"></column>
</property>
<property name="image">
<column name="IMAGE" sql-type="mediumblob"></column>
</property>
<!-- 若希望精确映射 SQL 类型, 可以使用 sql-type 属性. -->
<property name="content">
<column name="CONTENT" sql-type="mediumtext"></column>
</property>
<property name="image">
<column name="IMAGE" sql-type="mediumblob"></column>
</property>
保存二进制blob:
@Test public void testBlob() throws Exception{ News news = new News(); news.setAuthor("cc"); news.setContent("CONTENT"); news.setDate(new Date()); news.setDesc("DESC"); news.setTitle("CC"); InputStream stream = new FileInputStream("Hydrangeas.jpg"); Blob image = Hibernate.getLobCreator(session) .createBlob(stream, stream.available()); news.setImage(image); session.save(news); }
读取二进制blob:
@Test public void testBlob() throws Exception{ News news = (News) session.get(News.class, 1); Blob image = news.getImage(); InputStream in = image.getBinaryStream(); System.out.println(in.available()); }
评论(0)