Как сериализовать объект в базу данных для Hibernate для чтения на Java - PullRequest
3 голосов
/ 11 мая 2011

В настоящее время я пишу инструмент для подключения к существующему корпоративному приложению, которое использует Hibernate.Мой инструмент во время установки должен записать некоторые значения в базу данных, где один из столбцов является сериализованной версией объекта дескриптора настройки.Этот объект имеет два списка объектов и несколько примитивных типов.

Мой текущий подход - создать ByteArrayOutputStream и ObjectOutputStream, а затем записать ObjectOutputStream в ByteArrayOutputStream, а затем передатьрезультирующий байтовый массив в sql с Spring 1SimpleJdbcTemplate1.Моя текущая проблема с этим подходом состоит в том, что, когда корпоративный инструмент извлекает мои строки, он не может десериализовать столбец следующим образом:

org.springframework.orm.hibernate3.HibernateSystemException: could not deserialize; nested exception is org.hibernate.type.SerializationException: could not deserialize

Я чувствую, что мне может потребоваться сериализовать внутренние объекты, но у меня нетПонять, как это сделать и сохранить все вместе.

Ответы [ 2 ]

4 голосов
/ 11 мая 2011

Закончилось решением моей собственной проблемы.В hibernate API есть класс с именем SerializationHelper , который имеет статическую функцию serialize(Serializable obj), которую я смог использовать для сериализации моего объекта и затем вставить его в базу данных.После этого Hibernate смог прочитать его в корпоративном приложении.

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

Вы можете разделить Java-объект на байты и затем сохранить его в BLOB.

Сериализация:

ByteArrayOutputStream byteOut = new ByteArrayOutputStream();
ObjectOutputStream objOut = new ObjectOutputStream(byteOut);
objOut.writeObject(object);
objOut.close();
byteOut.close();
byte[] bytes = byteOut.toByteArray()

Deserialize:

 public <T extends Serializable> T getObject(Class<T> type) throws IOException, ClassNotFoundException{
        if(bytes == null){
            return null;
        }
        ByteArrayInputStream byteIn = new ByteArrayInputStream(bytes);
        ObjectInputStream in = new ObjectInputStream(byteIn);
        T obj = (T) in.readObject();
        in.close();
        return obj;
    }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...