我目前正在编写一个工具来插入使用Hibernate的现有企业应用程序。我的安装时工具需要将一些值写入数据库,其中一列是设置描述符对象的序列化版本。该对象有两个对象列表和一些基本类型。
我目前的做法是创建ByteArrayOutputStream
和ObjectOutputStream
,然后将ObjectOutputStream
写入ByteArrayOutputStream
,然后将生成的字节数组传递给带有Spring的sql 1SimpleJdbcTemplate1。我目前使用这种方法的问题是,当企业工具提取行时,它无法使用以下内容对列进行反序列化:
org.springframework.orm.hibernate3.HibernateSystemException: could not deserialize; nested exception is org.hibernate.type.SerializationException: could not deserialize
我觉得我可能需要序列化内部对象,但不知道如何做到这一点并将所有内容保持在一起。
答案 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;
}