簡體   English   中英

難以將ArrayList設置為java.sql.Blob以使用休眠方式保存在數據庫中

[英]Difficulty setting ArrayList to java.sql.Blob to save in DB using hibernate

我正在嘗試通過將Java ArrayList設置為Blob來將其保存在數據庫(H2)中,以供以后檢索。 如果這是一個不好的方法,請說-我在這方面找不到很多信息。

我在數據庫中有一列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);
}

我要保存到對象中的對象( plan.drawingPane21.pointList )類型為ArrayList<DrawingDot>DrawingDot是實現Serializable的自定義類。

我的代碼在drawingBlob.setBytes(0, buff);上失敗 使用NullPointerException

幫助贊賞。

如果有人遇到相同的問題,我可以通過利用SerialBlob類的構造函數而不是使用setBytes來解決:

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

您從未初始化變量drawingBlob:

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

我對Hibernate的了解非常有限,但是我相信,如果將數據類型映射到Blob,則hibernate將為您執行序列化,這很有意義,因為在Blob中設置數據的標准方法是通過參數化方法PreparedStatement的。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM