спящий + Oracle 11.2 + BLOB - PullRequest
       18

спящий + Oracle 11.2 + BLOB

1 голос
/ 12 мая 2011

Я много гуглил и не нашел рабочей проблемы ... В моем веб-приложении мне нужно загружать большие файлы, используя 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>

Это тоже не помогло ... у кого-нибудь есть решение для этого? Любая помощь будет хорошей.

1 Ответ

0 голосов
/ 29 октября 2012

Вам необходимо сопоставить класс домена следующим образом:

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

Кроме того, убедитесь, что вы создали столбец в базе данных как BLOB.

Наконец, я рекомендуючто вы не используете «InputStream» в своем FormBean, а вместо этого используете что-то вроде «MultiPartFile», поскольку вы можете прочитать InputStream только один раз (если вы не перематываете / перезагружаете его).Кроме того, MultiPartFile даст вам имя файла и длину.

...