Как выразить тип Serializable Blob в файле отображения гибернации - PullRequest
1 голос
/ 29 сентября 2011

У меня есть устаревшее приложение, которое использует hibernate для отображения объектов в базу данных. Для этого он использует XML-файл Hibernate Mapping. Класс java содержит два свойства abc и def, которые реализуют Java-сериализуемый. Отображение определяется следующим образом:

<property name="abc" column="ABC" type="serializable" length="32672"/>
<property name="def" column="DEF" type="serializable" length="32672"/>

Когда я пытаюсь установить это с помощью oracle, я получаю неприятную ошибку "ORA-01754: таблица может содержать только один столбец типа LONG", который по существу жалуется на создание двух столбцов "long raw" в одной таблице. Oracle не любит это. После прочтения этой проблемы рекомендуется использовать большие двоичные объекты вместо типов long raw.

У меня вопрос, как я могу выразить в файле отображения hibernate, чтобы использовать сериализуемый тип, сопоставленный в столбце BLOB-объектов? Я бы подумал, что будет тип serializable_blob, но, похоже, его нет.

Я знаю, что это возможно с аннотациями JPA с использованием @Basic и @Lob. Это также должно быть возможно при использовании файла отображения hibernate. Как это можно сделать в файле отображения гибернации?

Обновление:

Следующие команды не работают как сериализуемые произведения:

  • type = binary - этот ожидает байт []. Не работает для сериализуемых классов. Дает ClassCastException.
  • type = blob - - Этот объект ожидает java.sql.Blob. Не работает для сериализуемых классов. Дает ClassCastException.
  • type = materialized_blob - - Этот ожидает байт []. Не работает для сериализуемых классов. Дает ClassCastException.

Ответы [ 2 ]

0 голосов
/ 27 ноября 2014

Хорошо, после моего комментария провел еще какое-то исследование, и, как выяснилось, Jove нашел его.

В Hibernate 3.5 + Spring 3.1 я использовал Spring's org.springframework.orm.hibernate3.support.BlobSerializableType. Сейчас я обновляюсь до Hibernate 4.3, эта опция больше не доступна. Я нашел отображение типа в столбец как OP, но в моем приложении есть различные строки (устаревшие), которые сопоставляются с полями BLOB.

Итак, как я сообщил в комментарии выше, я нашел тип org.hibernate.type.SerializableToBlob, который является параметризованным. Ниже показано, как я получил отображение (используя старые добрые отображения hbm.xml)

<property name="description" column="TEXT">
    <type name="org.hibernate.type.SerializableToBlobType">
        <param name="classname">java.lang.String</param>
    </type>
</property>

И это, кажется, делает трюк. (мне кажется, значение classname должно соответствовать типу атрибута, который вы отображаете)

0 голосов
/ 29 сентября 2011
<property
    name="data"
    type="blob"
    column="DATA"/>
...

должно работать.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...