Я новичок в db4o. У меня большая проблема с сохранением графа объектов. Я пытаюсь перейти со старого компонента персистентности на новый, используя db4o.
До того, как я пропустил все объекты, его график выглядел так, как показано ниже (взгляните на строковое поле Zrodlo.Metadane.abstrakt со сфокусированным значением) [его вид из отладчика eclipse] с кодом:
ObjectContainer db=Db4o.openFile(DB_FILE);
try {
db.store(encja);
db.commit();
} finally{
db.close();
}
альтернативный текст http://img139.imageshack.us/img139/4609/beforesave.png
После этого я попытался прочитать его с кодом:
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" теперь пусто !!!
альтернативный текст http://img412.imageshack.us/img412/7162/aftersave.png
Я смотрю на это, используя ObjectManager (рисунок ниже), и поле abstrakt имеет не нулевое значение !!! То же значение, что на 1-м снимке.
альтернативный текст http://img341.imageshack.us/img341/1170/objectmanagerview.png
Пожалуйста, помогите мне :) Это мой второй день с db4o. Заранее спасибо!
Я прилагаю некоторый код со структурой постоянного класса:
открытый класс EncjaDanych {
Map mapaIdRepo = new HashMap ();
public Map mapaNazwaRepo = new HashMap (); }
!!!!!!!! ОБНОВЛЕНО:
Когда я пытался читать только объект Metadane (был только один такой объект), все было в порядке - это абстракт строкового поля мог быть прочитан правильно.
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();
}