【问题标题】:db4o issue with graph of objects对象图的 db4o 问题
【发布时间】:2010-05-16 15:30:55
【问题描述】:

我是 db4o 的新手。我对对象图的持久性有一个大问题。我正在尝试使用 db4o 从旧的持久性组件迁移到新的。

在我保留所有对象之前,它的图表如下所示(查看具有焦点值的 Zrodlo.Metadane.abstrakt 字符串字段)[它来自 eclipse 调试器的视图] 带有代码:

  ObjectContainer db=Db4o.openFile(DB_FILE);
    try {
        db.store(encja);
        db.commit();            
    } finally{
        db.close();         
    }

之后,我尝试用代码读取它:

ObjectContainer db=Db4o.openFile((DB_FILE));

    try{
        Query q = db.query();
        q.constrain(EncjaDanych.class);
        ObjectSet<Object> objectSet = q.execute();
        logger.debug("objectSet.size" + objectSet.size());
        EncjaDanych encja = (EncjaDanych) objectSet.get(0);
        logger.debug("ENCJA"  + encja.toString());
        return encja;
    }finally{
        db.close();         
    }       

我明白了(下图) - 字符串字段“abstrakt”现在为空!!!

我使用 ObjectManager(下图)查看了它,abstrakt 字段在那里有非空值!!!与第一张图片相同的值。

请帮助我 :) 这是我使用 db4o 的第二天。提前致谢!

我正在附加一些具有持久类结构的代码:

公共课 EncjaDanych{ 映射 mapaIdRepo = new HashMap(); 公共地图 mapaNazwaRepo = new HashMap(); }

!!!!!!!!!更新: 当我试图只读取 Metadane 对象(只有一个这样的对象)时,没关系 - 它的字符串字段 abstrakt 可以正确读取。

        try{
        Query q = db.query();
        q.constrain(Metadane.class);
        ObjectSet<Object> objectSet = q.execute();
        logger.error("objectSet.size" + objectSet.size());
        Metadane meta = (Metadane) objectSet.get(0);

        logger.debu("Metadane"  + meta.toString());
        return meta;
    }finally{
        db.close();         
    }       

【问题讨论】:

    标签: db4o


    【解决方案1】:

    这是一个常见的 db4o 常见问题解答,是 db4o 所谓的“激活”问题。当您从 ObjectContainer 加载对象时,db4o 不会实例化您存储的整个图。默认情况下,对象被实例化为深度 5。您可以将默认配置更改为更高的值,但不建议这样做,因为原则上它会减慢对象加载速度,因为在您使用查询加载对象的任何地方都会使用深度。

    有两种方法可以解决您的问题:

    (1) 当您需要特定深度时,您可以手动将对象激活到所需深度。 db.activate(encja, 10) // 10 is arbitrary

    (2) 您可以使用透明激活。 db4o 教程和参考文档中有多个章节介绍了如何使用透明激活 (TA)。

    【讨论】:

      【解决方案2】:

      您没有在查询中设置过滤器,因此您正在读取第一个对象。您确定数据库中没有以前的对象吗?

      【讨论】:

      • 我只测试一个对象。可以肯定的是,我正在通过记录器对其进行跟踪。
      猜你喜欢
      • 1970-01-01
      • 2012-01-24
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多