spring+hibernate的clob大字段處理(轉載于javaeye論壇)
在spring中如何處理oracle大字段
在spring中采用OracleLobHandler來處理oracle大字段(包括clob和blob),則在程序中不需要引用oracle的特殊類,從而能夠保證支持我們的代碼支持多數據庫。
1、首先數據表中的clob類型對應java持久化類的String類型;而blob類型對應byte[]類型
2、定義hibernate標簽時,持久化類中對應clob類型的屬性的hibernate type應為org.springframework.orm.hibernate.support.ClobStringType;而對應blob類型的屬性的hibernate type應為org.springframework.orm.hibernate.support.BlobByteArrayType。
3、以后訪問這些對應clob和blob類型的屬性時,按普通屬性處理,不需要特別編碼。
java代碼:















Spring為處理數據庫Lob字段,特別提供了LobHandler接口。在操作Oracle RDBMS過程中,由于Oracle JDBC Driver實現的問題,應用必須采用Oracle原生的數據庫連接(比如,oracle.jdbc.OracleConnection)、LOB原生實現(比如,oracle.sql.BLOB、oracle.sql.CLOB)。因此,LobHandler接口存在上述兩種實現。簡而言之,為操作Oracle數據庫,必須使用OracleLobHandler實現。如果操作其他RDBMS類型,則使用DefaultLobHandler。NativeJdbcExtractor是個接口,通過它能夠抽象各種連接池。另外Spring還提供兩個接口存取Blob,LobCreator及LobHandler
hbm文件配置
length="10000"></property>
JavaBean的對應的屬性類型為String。
需要注意兩點:(1)如果使用Oracle9i自帶的class12.jar這個JDBC驅動的話是不行的,會報錯,據說要升級到classes12-9i.jar,我在Oracle的網站上沒找到對應的下載,下載了ojdbc14.jar就可以了。(2)對Clob或Blog的操作必須在一個事務中進行,如在Dao層測試會出錯,在配置了事務的Logic層就沒問題了。
經過測試,如果用Oracle10g的JDBC驅動就沒這么麻煩了,Hibernate+Oracle+CLOB的讀寫其實只要這樣做:
1.在Oracle里設置某字段為clob類型。
2.在Hibernate的配置文件里使用網上下載的Oracle 10g最新的jdbc驅動。
3.實體類里把clob字段對應的屬性類型設置為String。
4.hibernate的映射文件*.hbm.xml里把該字段對應的類型該為text。
然后就可以在程序里把它當成String隨便用了。
補充:按照上面的方法又寫了一個測試類,能夠操作Clob字段了,但是啟動JBOSS后就不能用了,后來找了很久才發現,原來我用的JBOSS的default/lib目錄下也有一下老版本的Class12.jar,刪除它換成最新的ojdbc14.jar就可以了。