难以将ArrayList设置为java.sql.Blob以使用hibernate保存在DB中

时间:2010-06-10 11:43:09

标签: java hibernate blob

我正在尝试将java ArrayList保存在数据库(H2)中,方法是将其设置为blob,以便以后检索。如果这是一个糟糕的方法,请说 - 我无法找到有关该领域的更多信息。

我在数据库中有一个类型为Blob的列,Hibernate使用java.sql.Blob映射到此列。我正在努力的代码是:

Drawings drawing = new Drawings();

try {
    ByteArrayOutputStream bos = new ByteArrayOutputStream();
    ObjectOutputStream oos = null;
    oos = new ObjectOutputStream(bos);
    oos.writeObject(plan.drawingPane21.pointList);
    byte[] buff = bos.toByteArray();
    Blob drawingBlob = null;
    drawingBlob.setBytes(0, buff);
    drawing.setDrawingObject(drawingBlob);
} catch (Exception e){
    System.err.println(e);
}

我正在尝试保存为blob(plan.drawingPane21.pointList)的对象属于ArrayList<DrawingDot>类型,DrawingDot是实现Serializable的自定义类。

我的代码在drawingBlob.setBytes(0, buff);NullPointerException上失败了。

帮助表示赞赏。

2 个答案:

答案 0 :(得分:2)

如果有人遇到同样的问题,我通过利用SerialBlob类的构造函数而不是使用setBytes来解决它:

byte[] buff = bos.toByteArray();
Blob drawingBlob = null;
drawingBlob = new SerialBlob(buff);
drawing.setDrawingObject(drawingBlob);

答案 1 :(得分:0)

您从未初始化变量drawingBlob:

Blob drawingBlob = null;//<- not initialized
drawingBlob.setBytes(0, buff);//<- drawingBlob is null here.

我对Hibernate的了解非常有限,但我相信如果数据类型映射到Blob,那么hibernate会为你执行序列化,这是有意义的,因为在blob中设置数据的标准方法是通过方法在参数化的PreparedStatement中。