如何在Java Berkeley DB中存储ArrayList字段?

时间:2011-09-10 17:50:31

标签: java serialization tuples berkeley-db-je

我在Java中使用TupleSerialBinding将此结构存储在berkeley DB中:

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创建的最小值。 在我基于SamplesValues

创建EntityBinding之后

我没有找到如何存储&#34; values数组&#34;使用TupleSerialBinding。

存储min和max的值,但不存储values数组。

1 个答案:

答案 0 :(得分:2)

我会为SampleValues类创建一个代理

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

实施

initializeProxy
convertProxy
newInstance

将SampleValues类转换为SampleValuesProxy类的实例方法。将simple []替换为代理中的ArrayList。

然后您需要将代理注册为EntityModel

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

并将模型放入storeconfig

那么当berkleydb去存储你的SampleValues对象时,它会将它转换为代理类,并将其写入(反之亦然)

看一下课程

com.sleepycat.persist.impl.MapProxy

在berkeleydb源代码分发中有关如何实现它的示例。