2010-06-10 4 views
0

J'essaie de sauvegarder une ArrayList java dans une base de données (H2) en le définissant comme un blob, pour une récupération ultérieure. Si c'est une mauvaise approche, veuillez dire - je n'ai pas été en mesure de trouver beaucoup d'informations sur ce domaine.Difficulté de configuration ArrayList à java.sql.Blob à enregistrer dans la base de données en utilisant hibernate

J'ai une colonne de type Blob dans la base de données, et Hibernate mappe avec java.sql.Blob. Le code que je suis aux prises avec est:

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

L'objet que j'essaie de sauver dans un blob (plan.drawingPane21.pointList) est de type ArrayList<DrawingDot>, DrawingDot étant une classe personnalisée mise en œuvre Serializable. Mon code échoue sur la ligne drawingBlob.setBytes(0, buff); avec un NullPointerException.

Aide appréciée.

Répondre

0

Vous avez jamais initialisé la drawingBlob variable:

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

Ma connaissance de Hibernate est très limitée, mais je crois que si le type de données est associé à un Blob puis mise en veille prolongée effectuera la sérialisation pour vous, qui est logique car la façon standard de définir les données dans un blob est via les méthodes dans un PreparedStatement paramétré.

2

Au cas où quelqu'un est d'avoir le même problème, je l'ai résolu en tirant profit du constructeur de la classe SerialBlob plutôt que d'utiliser setBytes:

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