2011-05-12 93 views
1

我GOOGLE了很多,並沒有發現工作問題...在我的網絡應用程序中,我需要使用AJAX上傳大文件。我使用ajaxfileupload插件。在我的FormBean I類映射文件的InputStream:休眠+ Oracle 11.2 + BLOB

private InputStream fileData; 

@FormParam("file") 
@PartType("application/octet-stream") 
@JsonIgnore 
public void setFileData(InputStream fileData) { 
    this.fileData = fileData; 
} 

它工作正常。我可以將這個流保存到一個文件中,並且沒有java堆大小的問題。現在我試圖使用Hibernate將其保存到數據庫中。就像這樣:

repFile.setFileData(session.getLobHelper().createBlob(file.getFileData(), 1024L)); 

,當我保存repFile對象我有ORA-01461只能用於插入結合long值轉換爲一個LONG列。 它與甲骨文10.但它與Oracle 11.2 崩潰我試圖LobHandler接口添加到我的配置 - 沒有幫助

<property name="lobHandler"> 
     <bean class="org.springframework.jdbc.support.lob.OracleLobHandler"> 
      <property name="nativeJdbcExtractor"> 
       <bean class="org.springframework.jdbc.support.nativejdbc.CommonsDbcpNativeJdbcExtractor"/> 
      </property> 
     </bean> 
    </property> 

並設置批量大小爲0,並允許蒸

<prop key="hibernate.jdbc.use_streams_for_binary">true</prop> 
      <prop key="hibernate.jdbc.batch_size">0</prop> 

這也沒有幫助...有沒有人有這個解決方案?任何幫助都會很好。

回答

0

您需要在域類映射是這樣的:

@javax.persistence.Lob 
private java.sql.Blob fileData; 

此外,請確保您在數據庫中創建列作爲「斑點」。最後,我建議你不要在你的FormBean中使用'InputStream',而應該使用類似'MultiPartFile'的東西,因爲你只能讀取一次InputStream(除非你倒回/重置它)。另外,MultiPartFile會給你文件名和長度。