如何将jaxb对象创建为Clob。当我尝试以下不可序列化的错误时。
public static void createClob(TestTo testTo){
PreparedStatement pst = null;
Connection con = null;
//Clob studentListClob = null;
try {
con = openOASDBcon(false);
pst = con.prepareCall(INSERT_Clob);
pst.setBytes(1, getByteArrayObject(testTo));
pst.setString(2, "");
pst.executeUpdate();
} catch (Exception e) {
e.printStackTrace();
} finally {
close(con, pst);
}
}
private static byte[] getByteArrayObject(TestTo testTo){
byte[] byteArrayObject = null;
try {
ByteArrayOutputStream bos = new ByteArrayOutputStream();
ObjectOutputStream oos = new ObjectOutputStream(bos);
oos.writeObject(testTo);
oos.close();
bos.close();
byteArrayObject = bos.toByteArray();
} catch (Exception e) {
e.printStackTrace();
return byteArrayObject;
}
return byteArrayObject;
}
无法实现可序列化。有没有最好的方法来实现jbb对象clob。
答案 0 :(得分:0)
有几种方法可以将JAXB对象粘贴到数据库中的CLOB(或BLOB)列中。我认为您必须执行一些自定义插入和选择逻辑以将JAXB对象放入列中 - 正常的ORM模型将是每个对象的一行,每个对象的字段有一列(例如,如果您使用的是hibernate )。
选项1:配置xjc以生成可序列化的JAXB类(How to generate a Java class which implements Serializable interface from xsd using JAXB?)。然后使用Serializable接口从clob / blob的输入/输出流中读取/写入对象。这将Java对象表示存储在数据库中。
选项2:使用JAXB提供的XML marshal / unmarshal路径以XML文本形式读取/写入对象的状态。这将对象的XML表示存储在数据库中。
我个人会选择选项2 - XML表示。我认为更容易管理XSD中的更改并确保您可以读取旧对象,而不必处理Java的串行版本ID。此外,您可能需要考虑在将XML放入CLOB之前压缩XML(请参阅Compressing and decompressing streams)。