我google了很多,但没有找到工作问题...在我的网络应用程序中,我需要使用ajax上传大文件。我使用ajaxfileupload插件。在我的FormBean类中,我将文件映射到InputStream:
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列。 它适用于Oracle 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 :(得分:0)
您需要像这样映射域类:
@javax.persistence.Lob
private java.sql.Blob fileData;
另外,请确保在数据库中将列创建为“BLOB”。
最后,我建议您不要在FormBean中使用'InputStream',而是使用类似'MultiPartFile'的东西,因为您只能读取一次InputStream(除非您回放/重置它)。此外,MultiPartFile将为您提供文件名和长度。