Datanucleus / mongodb:坚持列表的地图

时间:2013-07-09 16:18:23

标签: java mongodb jdo datanucleus

我正在使用datanucleus 3.2.5 / JDO将对象持久保存到MongoDB数据库。

在尝试保留一个列表地图时,我遇到以下异常:

RuntimeException: json can't serialize type [list element type here]

一些示例代码:

@PersistenceCapable
public class SomeClass {
    private Map<String, List<SomeOtherClass>> myAttribute;
    // ...
}


@PersistenceCapable(embeddedOnly="true")
public class SomeOtherClass {
    private String attribute;
    // ...
}

我可以解决这个问题,将嵌入属性注释为@Serialized,但我宁愿选择更优雅的方式。

我错过了什么吗?有没有更好的方法解决这个问题?

1 个答案:

答案 0 :(得分:0)

在DataNucleus论坛中引用Andy的reply我的问题:

  

没有持久性规范定义对容器容器的任何支持。始终建议您将内部容器(在您的情况下为List)作为中间类的字段。

所以这里有两种方法:

使用中间类

迄今为止最优雅,最易维护的解决方案。按照示例玩具代码:

@PersistenceCapable
public class SomeClass {
    private Map<String, SomeOtherClassContainer> myAttribute;
    // ...
}

@PersistenceCapable(embeddedOnly="true")
public class SomeClassContainer {
    private List<SomeOtherClass> myAttribute;
    // ...
}

@PersistenceCapable(embeddedOnly="true")
public class SomeOtherClass {
    private String attribute;
    // ...
}

将属性标记为@Serializable

丑陋,可能是头痛的根源,特别是如果依赖java default serialization

@PersistenceCapable
public class SomeClass {
    @Serializable
    private Map<String, List<SomeOtherClass>> myAttribute;
    // ...
}

@PersistenceCapable(embeddedOnly="true")
public class SomeOtherClass implements Serializable {
    private String attribute;
    // ...
}