對于BLOG和CLOB字段,大部分數(shù)據(jù)庫提供了較為透明的支持,但Oracle比較特殊一些,在用Spring和Hibernate操作時,需要作一些特殊的處理,以CLOB為例,基本有下面幾個步驟[注:下面大部分內(nèi)容來自于網(wǎng)絡]:
1、在Spring的配置文件中加入以下幾個Bean的定義
<bean id="nativeJdbcExtractor" class="org.springframework.jdbc.support.nativejdbc.SimpleNativeJdbcExtractor"/>
<bean id="oracleLobHandle" class="org.springframework.jdbc.support.lob.OracleLobHandler" Lazy-init="true">
<property name="nativeJdbcExtractor">
<ref local="nativejdbcExtractor"/>
</property>
</bean>
2、在sessionFactory這個Bean中加入一個屬性的引用
<property name="lobHandler"><ref bean="oracleLobHandle"/></property>
3、在需要clob的JavaBean對應的hbm.xml中,改對應的clob類型的字段
<property
name="XXX" type="org.springframework.orm.hibernate3.support.ClobStringType"
clumn=""
length="XXX" <!--定義clob字段大小(以字節(jié)為單位,最大2GB)-->
/>
4、?JavaBean的對應的屬性類型為String。
基本上是這四個要點。需要注意兩點:(1)如果使用Oracle9i自帶的class12.jar這個JDBC驅(qū)動的話是不行的,會報錯,據(jù)說要升級到classes12-9i.jar,我在Oracle的網(wǎng)站上沒找到對應的下載,下載了ojdbc14.jar就可以了。(2)對Clob或Blog的操作必須在一個事務中進行,如在Dao層測試會出錯,在配置了事務的Logic層就沒問題了。
經(jīng)過測試,如果用Oracle10g的JDBC驅(qū)動就沒這么麻煩了,Hibernate+Oracle+CLOB的讀寫其實只要這樣做:
1.在Oracle里設置某字段為clob類型。
2.在Hibernate的配置文件里使用網(wǎng)上下載的Oracle 10g最新的jdbc驅(qū)動。
3.實體類里把clob字段對應的屬性類型設置為String。
4.hibernate的映射文件*.hbm.xml里把該字段對應的類型該為text。
然后就可以在程序里把它當成String隨便用了。
補充:按照上面的方法又寫了一個測試類,能夠操作Clob字段了,但是啟動JBOSS后就不能用了,后來找了很久才發(fā)現(xiàn),原來我用的JBOSS的default/lib目錄下也有一下老版本的Class12.jar,刪除它換成最新的ojdbc14.jar就可以了。
posted on 2006-11-17 18:02
fish的Blog 閱讀(1414)
評論(4) 編輯 收藏 所屬分類:
hibernate