我正在使用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
,但我宁愿选择更优雅的方式。
我错过了什么吗?有没有更好的方法解决这个问题?
答案 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;
// ...
}
丑陋,可能是头痛的根源,特别是如果依赖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;
// ...
}