Hibernate操作Oracle中clob、blob总结
一、区别与定义
LONG: 可变长的字符串数据,最长2G,LONG具有VARCHAR2列的特性,可以存储长文本一个表中最多一个LONG列
LONG RAW: 可变长二进制数据,最长2G
CLOB: 字符大对象Clob 用来存储单字节的字符数据
NCLOB: 用来存储多字节的字符数据
BLOB: 用于存储二进制数据
BFILE: 存储在文件中的二进制数据,这个文件中的数据只能被只读访。但该文件不包含在数据库内。
bfile字段实际的文件存储在文件系统中,字段中存储的是文件定位指针.bfile对oracle来说是只读的,也不参与事务性控制和数据恢复。
二、clob、blob实现方式
1、Clob字段 - 注解方式的实现
2、Clob字段 - 映射文件的实现
3、Blob字段 - 注解方式的实现
4、Blob字段 - 映射文件的实现
1、Clob字段 - 注解方式的实现
Hibernate 配置文件:hibernate.cfg.xml
测试程序:
提示:
1. 在Oracle10g + 10g驱动(或者Oracle11g + 11g驱动)的环境下,只需要在Clob字段上,增加注解@Column(name = "CONTENT", columnDefinition = "CLOB"),即可成功实现建表、Clob字段的读写操作。
2. 在Oracle9i+9i的驱动环境下,仅增加注释@Column(name = "CONTENT", columnDefinition = "CLOB")时,建表、写人数据均能正常,但读取时会显示数据为空。如果在Oracle9i下又必须用9i的驱动,可以在Clob字段中再增加一行注解@Lob 或者 @Type(type = "text")。([color=blue]运用spring中org.springframework.jdbc.support.lob.OracleLobHandler,这个没有具体实践过,就不在本文展开了 )
3. 在Oracle9i+10g的驱动环境下,增加注解@Column(name = "CONTENT", columnDefinition = "CLOB"),同样可以成功实现建表、Clob字段的读写操作,可见9i的驱动对Clob支持不是很好,但10g、11g已经做了更新。[/color]
2、Clob字段 - 映射文件的实现
Bean文件:
映射文件:tb_bigstr.hb.xml
在hibernate.cfg.xml文件中增加域对象的映射文件:
测试程序:
提示:
如果是映射文件的,只需要把Clob字段的类型指定为text即:type="text"。
3、Blob字段 - 注解 方式的实现
在hibernate.cfg.xml中增加域对象:
运行测试程序:
提示:
对于byte[] 类型的字段如果要映射成Blob字段,只需要在该字段增加如下注解即可:
映射文件:tb_bigstr.hb.xml
测试程序:
提示
对于是映射文件的方式,Blob字段的类型指定为binary即:type=" binary "。
本文转自:http://sjsky.iteye.com/blog/1154916