datanucleus jdo mongodb-地图值中的摘要孩子不持续



我正在使用datanucleus/jdo在mongodb db中持续存在对象。我试图坚持一个包含地图的对象,哪种值类型是抽象类。

当我尝试坚持一个对象的实例时,抽象类的字段持续存在,但不是子类的字段。

以下是一些代码。

Zoo.java

    @PersistenceCapable
    public class Zoo {
            @Persistent
            private String fieldZoo;
            @Persistent
            private Map<String, Animal> mapStringAnimal;
            // etc... basic constructor...
    }

Animal.java

    @PersistenceCapable(embeddedOnly = "true")
    public abstract class Animal {
            @Persistent
            private String  fieldAnimal;
    }

dog.java

    @PersistenceCapable(embeddedOnly = "true")
    public class Dog extends Animal {
            @Persistent
            private String  fieldDog;
    }

test.java

    public static void main(String[] args) {
            Map<String, Animal> mapStringAnimal = new HashMap<String, Animal>();
            Dog dog = new Dog("valueFieldAnimal", "valueFieldDog");
            mapStringAnimal.put("dogKey", dog);
            Zoo zoo = new Zoo("valueFieldZoo", mapStringAnimal);
            Properties properties = new Properties();
            properties.setProperty("javax.jdo.PersistenceManagerFactoryClass", "org.datanucleus.api.jdo.JDOPersistenceManagerFactory");
            properties.setProperty("javax.jdo.option.ConnectionURL", "mongodb:/dbtest");
            properties.setProperty("javax.jdo.option.Mapping", "mongodb");
            properties.setProperty("datanucleus.autoCreateSchema", "true");
            PersistenceManagerFactory pmf = JDOHelper.getPersistenceManagerFactory(properties);
            PersistenceManager pm = pmf.getPersistenceManager();
            pm.makePersistent(zoo);
            pm.close();
    }

,当我看着mongodb时:

    > db.Zoo.find().pretty();
    {
            "_id" : ObjectId("50d2f5f7e4b0cae285990b2d"),
            "fieldZoo" : "valueFieldZoo",
            "mapStringAnimal" : [
                    {
                            "key" : "dogKey",
                            "value" : {
                                    "fieldAnimal" : "valueFieldAnimal"
                            }
                    }
            ]
    }

是的,但是datanucleus不支持嵌入式继承 map键/值。它确实支持嵌入的继承的收集元素(尚未发行的JDO3.1的一部分),但不相同地图。显然,该代码是开源的,任何人都可以潜入并做出贡献(当然,一旦您添加了一个歧视者,当然是"动物")。

最新更新