Сложность установки ArrayList в java.sql.Blob для сохранения в БД с использованием hibernate - PullRequest
0 голосов
/ 10 июня 2010

Я пытаюсь сохранить java ArrayList в базе данных (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.

Помощь оценена.

Ответы [ 2 ]

2 голосов
/ 15 июня 2010

Если у кого-то возникла такая же проблема, я решил ее, воспользовавшись конструктором класса SerialBlob вместо использования setBytes:

byte[] buff = bos.toByteArray();
Blob drawingBlob = null;
drawingBlob = new SerialBlob(buff);
drawing.setDrawingObject(drawingBlob);
0 голосов
/ 10 июня 2010

Вы никогда не инициализировали переменную DrawingBlob:

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

Мои знания Hibernate очень ограничены, но я считаю, что если тип данных сопоставлен с Blob, то Hibernate выполнит сериализацию за вас,который имеет смысл, поскольку стандартный способ задания данных в BLOB-объекте - через методы в параметризованном PreparedStatement.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...