如何将对象序列化为数据库以便Hibernate读取Java

时间:2011-05-11 14:37:08

标签: java database hibernate serialization

我目前正在编写一个工具来插入使用Hibernate的现有企业应用程序。我的安装时工具需要将一些值写入数据库,其中一列是设置描述符对象的序列化版本。该对象有两个对象列表和一些基本类型。

我目前的做法是创建ByteArrayOutputStreamObjectOutputStream,然后将ObjectOutputStream写入ByteArrayOutputStream,然后将生成的字节数组传递给带有Spring的sql 1SimpleJdbcTemplate1。我目前使用这种方法的问题是,当企业工具提取行时,它无法使用以下内容对列进行反序列化:

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

我觉得我可能需要序列化内部对象,但不知道如何做到这一点并将所有内容保持在一起。

2 个答案:

答案 0 :(得分:4)

结束解决我自己的问题。在hibernate API中有一个名为SerializationHelper的类,它有一个静态函数serialize(Serializable obj),我可以使用它来序列化我的对象,然后将其插入到数据库中。然后Hibernate能够在企业应用程序中读取它。

答案 1 :(得分:1)

您可以将Java对象序列化为字节,然后将其存储在BLOB中。

序列化:

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

反序列化:

 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;
    }