在Hibernate中檔案列對應的類型可以是org.springframework.orm.hibernate3.support.BlobByteArrayType,
org.springframework.orm.hibernate3.support.ClobStringType、clob、blob、binary。什麼時候用BlobBYteArrayType
什麼時候用ClobStringType?一般如果要處理的對象是資料庫欄位類型是blob時(主要是圖片,二進位對象等),
對應檔設定為:org.springframework.orm.hibernate3.support.BlobByteArrayType 資料庫欄位是clob(大文字物件)
類型時,要將java的屬性的類型定為String,對應檔設定為: org.springframework.orm.hibernate3.support.ClobStringType。
4.如果在spring上要使用Struts中內建的上傳功能必須在spring的設定檔中加以聲明.否者將會出現?
簀ava.lang.IllegalStateException: No LobHandler found forconfiguration - lobHandler property
must be set on LocalSessionFactoryBean異常。配置如下:
(1).聲明一個處理控制代碼:
<bean id="lobHandler" class="org.springframework.jdbc.support.lob.DefaultLobHandler" lazy-init="true" />
(2).在sessionFactory中注入lobHandler:
<bean id="sessionFactory" class="org.springframework.orm.hibernate3.LocalSessionFactoryBean">
<property name="lobHandler" ref="lobHandler"/>
</bean>
提示: 指定lobHandler時,對於MySQL、DB2、MS SQL Server、Oracle 10g,使用DefaultLobHandler即可,而Oracle 9i,
則可以使用OracleLobHandler。因為Oracle9i處理lob的方式和不太一樣,所以這裡要用spring提供的SimpleNativeJdbcExtractor.處理Oracle9i lob類型的特殊聲明:
<bean id="nativeJdbcExtractor" lazy-init="true" class="org.springframework.jdbc.support.nativejdbc.
SimpleNativeJdbcExtractor"/>
<bean id="lobHandler" lazy-init="true" class="org.springframework.jdbc.support.lob.OracleLobHandler">
<property name="nativeJdbcExtractor">
<ref bean="nativeJdbcExtractor"/>
</property>
</bean>
<bean id="sessionFactory" class="org.springframework.orm.hibernate3.LocalSessionFactoryBean">
<!-- 為處理Blob類型欄位的控制代碼聲明 -->
<property name="lobHandler">
<ref local="lobHandler" />
</property>
</bean>
同時還應該使用對應的JDBC驅動。
Clob欄位定義:<property name="屬性名稱" column="列名" type="org.springframework.orm.hibernate.support.ClobStringType"
length="1048"/>這裡的length是指位元組,最大可以到2G.該欄位在java對象中聲明為String類型。
如果使用的是mysql資料庫其預設的上傳檔案大小只有1047552位元組:如果上傳的檔案大於1047552位元組則會出現異常
org.springframework.jdbc.UncategorizedSQLException: You can change this value on the server by setting
the max_allowed_packet' variable.根據提示可以修改mysql資料庫的max_allowed_packet屬性大小。
開啟my.ini檔案中找到# SERVER SECTION後在port=3306下面加上max_allowed_packet=?M 修改完後重啟mysql服務即可成功上傳。