Как я могу сохранить поле ArrayList в БД Java Berkeley? - PullRequest
0 голосов
/ 10 сентября 2011

У меня есть эта структура в Java, которая будет сохранена в Беркли БД с использованием TupleSerialBinding:

public class SampleValues implements Serializable, MarshalledEntity {
private static final long serialVersionUID = 1L;

    protected double min;
    protected double max;

    protected ArrayList<Double> values = new ArrayList<Double>();
}

Ключ - это минимальное значение, которое создается с использованием класса для создания EntryBinding. После того, как я создаю EntityBinding на основе SamplesValues ​​

Я не нашел, как сохранить «массив значений» с помощью TupleSerialBinding.

Значения min и max сохраняются, а массив значений - нет.

1 Ответ

2 голосов
/ 11 сентября 2011

Я бы создал Proxy для класса SampleValues ​​как

@Persistent(proxyFor = SampleValues.class)
public class SampleValuesProxy implements PersistentProxy<SampleValues>, Serializable {
    ....
}

, реализуя методы экземпляра

initializeProxy
convertProxy
newInstance

для преобразования вашего класса SampleValues ​​в класс SampleValuesProxy.Подставляя простой [] для ArrayList в прокси.

, вам нужно зарегистрировать прокси с EntityModel как

EntityModel model = new AnnotationModel();
model.registerClass(SampleValuesProxy.class);

и поместить модель в storeconfig

Итак, когда berkleydb отправляется на хранение вашего объекта SampleValues, он преобразует его в прокси-класс и записывает его (и при чтении наоборот)

Посмотрите на класс

com.sleepycat.persist.impl.MapProxy

в исходном дистрибутиве berkeleydb для примера того, как его реализовать.

...